5

假设我已经制作了HTMLEditorKit(和其他相关类)的子类,以显示一些自定义 HTML 标记。我希望能够在 、 等中使用这些自定义JLabel标签JButton。除了创建自己的外观和感觉之外,还有什么方法可以做到这一点?也就是说,我想告诉 swing“使用这个实例HTMLEditorKit在 /etc 中呈现 HTML JLabel”,而不管当前使用的是什么外观。从我在 Swing internals 中所做的小调查来看,我认为这是不可能的,但我很想被证明是错误的。

4

3 回答 3

3

可以办到:

关键在于 class javax.swing.plaf.basic.BasicLabelUI,这是标签的基本 UI。

在paint方法中,我们可以看到这段代码:

View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
    v.paint(g, paintTextR);
}

BasicHTML 类是 Java 中 HTML 功能的提供者,因此,理论上,如果您将 client 属性替换为BasicHTML.propertyKey您自己的 View 实现,那么将使用该类,您可以执行任何您想要呈现文本的操作。

该类javax.swing.plaf.basic.BasicLabelUI是大多数其他 LAF 标签 UI 的父类,但不是全部,因此它可能不适用于所有 LAF。不支持使用BasicHTML该类的 HTML 的 LAF 也不适用于您的修复。

但恕我直言,这更像是一种黑客行为而不是功能。您正在编程反对实现,而不是接口。因此,如果您没有真正的理由这样做,我建议您找到一种更简洁的方法来呈现您的自定义 HTML,例如 JLabel 子类。

于 2012-05-04T00:08:33.170 回答
1

不能正常进行。. . 如果你扩展JLabelJButton类,这可能是可能的,但这些似乎需要做很多工作,因为有更好的方法可以做[1]。不过会是有用的课程。

[1]:如果文本不需要是动态的,请尝试在JImagesIcons.

于 2012-05-03T23:42:54.453 回答
-1

请参考https://bugs.openjdk.java.net/browse/JDK-6540252
错误报告者提出了几种解决方法。

于 2018-04-02T18:31:18.893 回答