假设我已经制作了HTMLEditorKit
(以及其他相关类)的子级别,以便显示一些自定义HTML标记。我希望能够在JLabel
,JButton
等中使用这些自定义标记。除了创建自己的外观之外,有没有办法做到这一点?也就是说,我想告诉swing“使用HTMLEditorKit
的这个实例来呈现JLabel
/ etc中的HTML”,而不管当前使用的是什么样的外观。从我在Swing内部进行的小捅我不认为这是可能的,但我希望被证明是错的。
答案 0 :(得分:3)
可以这样做:
密钥位于类javax.swing.plaf.basic.BasicLabelUI
中,这是标签的基本UI。
在paint方法中,我们可以看到这段代码:
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
v.paint(g, paintTextR);
}
BasicHTML类是Java中HTML功能的供应商,因此,理论上,如果用您自己的View实现替换BasicHTML.propertyKey
的客户端属性,那么将使用该类,您可以做任何事情。想要渲染文字。
类javax.swing.plaf.basic.BasicLabelUI
是大多数其他LAF标签UI的父级,但不是全部,因此它可能不适用于所有LAF。使用BasicHTML
类不支持HTML的LAF也无法使用您的修复程序。
但恕我直言,这不仅仅是一个黑客而非功能。你正在编写反向编程实现,而不是接口。因此,如果您没有真正认真的理由这样做,我建议您找一种更清晰的方式来呈现您的自定义HTML,例如JLabel子类。
答案 1 :(得分:1)
无法正常完成。 。 。如果你扩展JLabel
和JButton
类,它可能是有可能的,但这些似乎有很多工作要做更好的方法[1]。虽然会是有用的课程。
[1]:如果文字不需要是动态的,请尝试使用JImagesIcons
中的图片。
答案 2 :(得分:-1)
请参阅https://bugs.openjdk.java.net/browse/JDK-6540252
臭虫记者提出了几个解决方法。