如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等

Posted

技术标签:

【中文标题】如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等【英文标题】:How to make Swing use my own HTMLEditorKit for JLabel/JButton/etc 【发布时间】:2011-12-20 21:49:39 【问题描述】:

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

【问题讨论】:

Swing JComponents 接受 HTML 我觉得也做不到。您可以查看 BasicHTML 类以了解如何使用 BasicEditorKit 【参考方案1】:

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

【讨论】:

请在答案中包含链接内容的基本部分。如果链接断开,您的答案将毫无用处【参考方案2】:

可以做到:

关键在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 的客户端属性替换为您自己的 View 实现,那么将使用该类,您可以做任何您想做的事情渲染文本。

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

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

【讨论】:

aaaaach,可能很有趣 +1【参考方案3】:

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

[1]:如果文字不需要动态,请尝试使用JImagesIcons中的图片。

【讨论】:

以上是关于如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Ivy 将我的依赖项的依赖项捆绑到他们自己的 jar 中?

如何让 Vista 的讲述人向我朗读我的 Swing 组件?

Java Swing如何让JFrame获得焦点

如何让Java Swing Application在windows和linux中字体一致?

急求JAVA大神帮忙!!!如何在JAVA Swing中设置滚动条,并且让界面能够随滚动条移动?

如何在 Swing jframe 中嵌入 SWT 浏览器