如何让 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 标记。我希望能够在JLabel
、JButton
等中使用这些自定义标签。除了创建自己的外观和感觉之外,还有什么方法可以做到这一点?也就是说,我想告诉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】:不能正常进行。 . .如果您扩展 JLabel
和 JButton
类,这可能是可能的,但这些似乎需要做很多工作,因为有更好的方法可以做[1]。不过会是有用的课程。
[1]:如果文字不需要动态,请尝试使用JImagesIcons
中的图片。
【讨论】:
以上是关于如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Ivy 将我的依赖项的依赖项捆绑到他们自己的 jar 中?
如何让 Vista 的讲述人向我朗读我的 Swing 组件?
如何让Java Swing Application在windows和linux中字体一致?