首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Swing对JLabel/JButton等使用我自己的HTMLEditorKit

如何让Swing对JLabel/JButton等使用我自己的HTMLEditorKit
EN

Stack Overflow用户
提问于 2011-11-03 14:02:27
回答 3查看 590关注 0票数 5

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-04 08:08:33

可以这样做:

关键是在类javax.swing.plaf.basic.BasicLabelUI中,这是一个用于标签的基本UI。

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

代码语言:javascript
复制
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
    v.paint(g, paintTextR);
}

BasicHTML类是Java功能的提供者,因此,从理论上讲,如果您用自己的视图实现替换BasicHTML.propertyKey的客户端属性,那么将使用该类,并且您可以执行任何想要呈现文本的操作。

javax.swing.plaf.basic.BasicLabelUI是大多数其他LAF标签UI的父类,但不是全部,因此它可能不适用于所有LAF。不支持使用BasicHTML类的超文本标记语言的LAF也不会与您的修复一起工作。

但我觉得这更像是一种黑客攻击而不是一种特性。你是在针对实现而不是接口进行编程。因此,如果您没有真正重要的理由这样做,我建议您找到一种更简洁的方法来呈现您的自定义超文本标记语言,例如JLabel子类。

票数 3
EN

Stack Overflow用户

发布于 2012-05-04 07:42:54

这是不能正常完成的。。。如果你扩展JLabelJButton类,这也许是可能的,但对于一些有更好的do1方法的东西来说,这似乎是一项很大的工作。将会是有用的类。

1:如果文本不需要是动态的,可以尝试在JImagesIcons中使用图像。

票数 1
EN

Stack Overflow用户

发布于 2018-04-03 02:31:19

请参考https://bugs.openjdk.java.net/browse/JDK-6540252

bug报告者提出了几个变通方法。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7990857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档