2011-11-03 34 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中的圖像。

相關問題