gpt4 book ai didi

java - 如何让 Swing 为 JLabel/JButton/等使用我自己的 HTMLEditorKit

转载 作者:搜寻专家 更新时间:2023-11-01 03:12:05 25 4
gpt4 key购买 nike

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

最佳答案

可以做到:

关键在 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 也不适用于您的修复。

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

关于java - 如何让 Swing 为 JLabel/JButton/等使用我自己的 HTMLEditorKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7990857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com