2009-12-06 29 views
1

以下內容將JLabel與JTextArea關聯,並設置裝飾標籤的助記符。在Windows上按Alt-X將焦點移到JTextArea。無法在JLabel中使用HTML文本設置助記符

JTextArea textArea = new JTextArea(10, 20); 
    JLabel label = new JLabel("Text"); 
    label.setLabelFor(textArea); 
    label.setDisplayedMnemonic(KeyEvent.VK_X); 

但是,如果label使用HTML,如預期的那樣顯示的標籤,但它沒有裝飾的記憶。

JTextArea textArea = new JTextArea(); 
    JLabel label = new JLabel("<html>Text</html>"); //!!! NO DECORATION 
    label.setLabelFor(textArea); 
    label.setDisplayedMnemonic(KeyEvent.VK_X); 

這是預期的行爲嗎?任何解決方法?

編輯1:修改示例以使用不是基於Aziz'響應的HTML標記的一部分的助記符。

編輯2:刪除了關於助記鍵無法使用的問題,因爲進一步的實驗表明這取決於所使用的外觀和感覺。

回答

2

BasicLabelUI描繪的標籤不同,這取決於是否它有HTML與否。如果不是,BasicLabelUI會調用一些自己的函數來繪製下劃線。如果是,則使用BasicHTML.Renderer,並且不會繪製任何下劃線。

最簡單的解決方法是這樣:

JLabel label = new JLabel("<html>Te<u>x</u>t</html>"); 
+0

謝謝。基於你的回答,我嘗試了幾個不同的L&F中的實際代碼,儘管沒有一個人按照預期裝飾標籤,但按助記鍵仍然有效。我將再次編輯問題,刪除有關密鑰無法使用的評論。而強力HTML下劃線的作品。謝謝。 – clartaq

+0

可能因爲它們都從BasicLabelUI繼承。從我所看到的情況來看,繪畫最終由javax.swing.text.html.StyleSheet完成。 – lins314159

1

也許是因爲在<html>是加下劃線的那個。

嘗試使用setDisplayedMnemonicIndex()來修復

+0

都能跟得上。對不起,應該爲示例使用了不同的助記符,但即使我將其更改爲'x'或使用setDisplayedMnemonicIndex()(或兩者),它仍然不起作用。 我也會編輯這個例子。 – clartaq