2011-11-03 73 views
4

假设我已经创建了一个HTMLEditorKit(和其他相关类)的sublcass以显示一些自定义HTML标记。我希望能够在JLabelJButton等中使用这些自定义标签。有没有什么方法可以创造我自己的外观?也就是说,我想告诉swing“使用HTMLEditorKit的这个实例来渲染HTML在JLabel/etc”,而不管目前使用的是什么样的外观和感觉。从我在Swing内部所做的小小的动作中,我不认为这是可能的,但我很乐意被证明是错误的。如何让Swing为JLabel/JButton等使用我自己的HTMLEditorKit

+0

Swing JComponents接受HTML <= 3.2语法,然后我看不出任何问题,但JComponents默认为ONE LINE使用,除了JTextArea,JTextPane – mKorbel

+1

我不认为它也可以做到。您可以查看'BasicHTML'类来了解如何使用'BasicEditorKit'。 – camickr

回答

3

这是可以做到:

的关键是在类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客户财产的视图,那么这个类将被使用,你可以做任何你想要呈现文本。

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

但恕我直言,这是比功能更多的黑客。你正在编程实现,而不是接口。所以,如果你没有真正认真的理由这样做,我会建议找到一种更清晰的方式来呈现自定义HTML,比如JLabel子类。

+0

aaaaach,可能会很有趣+1 – mKorbel

1

它不能正常完成。 。 。如果你扩展了JLabelJButton类,这可能是可能的,但是对于有更好的方法来做这些事情,这些似乎是很多工作[1]。虽然会很有用。

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

相关问题