Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使Swing使用我自己的HTMLEditorKit用于JLabel/JButton/etc_Java_Html_Swing_Htmleditorkit - Fatal编程技术网

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请在答案中包含链接内容的基本部分。如果链接断开,你的答案将毫无用处