Java 如何使Swing使用我自己的HTMLEditorKit用于JLabel/JButton/etc
假设我已经创建了Java 如何使Swing使用我自己的HTMLEditorKit用于JLabel/JButton/etc,java,html,swing,htmleditorkit,Java,Html,Swing,Htmleditorkit,假设我已经创建了HTMLEditorKit(和其他相关类)的子类,以便显示一些自定义HTML标记。我希望能够在JLabel、JButton等中使用这些自定义标记。除了创造我自己的外观和感觉,还有什么方法可以做到这一点吗?也就是说,我想告诉swing“使用HTMLEditorKit的这个实例在JLabel/etc中呈现HTML”,不管当前使用的是什么外观和感觉。从我在Swing堆内构件中所做的小动作来看,我认为这是不可能的,但我希望被证明是错误的。这不能正常完成。如果您扩展JLabel和JButt
HTMLEditorKit
(和其他相关类)的子类,以便显示一些自定义HTML标记。我希望能够在JLabel
、JButton
等中使用这些自定义标记。除了创造我自己的外观和感觉,还有什么方法可以做到这一点吗?也就是说,我想告诉swing“使用HTMLEditorKit
的这个实例在JLabel
/etc中呈现HTML”,不管当前使用的是什么外观和感觉。从我在Swing堆内构件中所做的小动作来看,我认为这是不可能的,但我希望被证明是错误的。这不能正常完成。如果您扩展JLabel
和JButton
类,这可能是可能的,但这似乎需要做很多工作,因为有更好的方法[1]。不过,这是很有用的课程
[1] :如果文本不需要是动态的,请尝试在JImagesIcons
中使用图像。可以执行以下操作:
关键在于类javax.swing.plaf.basic.BasicLabelUI
,它是标签的基本UI
在paint方法中,我们可以看到以下代码:
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
v.paint(g, paintTextR);
}
BasicHTML类是Java中HTML功能的提供者,因此,从理论上讲,如果您使用自己的视图实现替换BasicHTML.propertyKey
的客户机属性,则将使用该类,并且您可以执行任何要呈现文本的操作
类javax.swing.plaf.basic.BasicLabelUI
是大多数其他LAF标签UI的父类,但不是所有的,因此它可能不适用于所有LAF。使用BasicHTML
类不支持HTML的LAF也不能与您的修复程序一起工作
但依我看,这更多的是一个黑客而不是功能。您正在编程againts实现,而不是接口。因此,如果您没有真正认真的理由这样做,我建议您找到一种更干净的方式来呈现自定义HTML,例如JLabel子类。请参阅bug reporter提出了一些解决方法。Swing JComponents接受HTML我认为这也做不到。您可以查看
BasicHTML
类,了解如何使用BasicEditorKit
。aaaaach,可能很有趣+1请在答案中包含链接内容的基本部分。如果链接断开,你的答案将毫无用处