2014-11-05 35 views
4

Swing允許在諸如JLabel之類的組件中使用html。 This文件詳細討論了這一點。它還顯示了特定文本的顏色如何改變。自定義java swing中的詳細html鏈接顏色

我正在與一個現有的擺動應用程序與成千上萬的這樣的組件。我想要改變使用它的鏈接的顏色。一次一個地做它們將是非常乏味的。默認情況下,如果沒有指定顏色,擺動似乎將它們渲染爲藍色。

如何將此默認值更改爲其他值?

回答

5

通過代碼,我已經學到了,以後多挖...

  1. HTML由HTMLEditorKit渲染和相關的API
  2. 通過HTMLEditorKit使用的默認樣式表維護中央/全球範圍內的AppContext ...

HTMLEditorKit#getStyleSheet

AppContext appContext = AppContext.getAppContext(); 
StyleSheet defaultStyles = (StyleSheet) appContext.get(DEFAULT_STYLES_KEY);  

這是很重要的,因爲它意味着你不需要花太多時間來試着去看標籤的外觀和感覺代碼,你應該能夠在一個地方改變全局樣式表並影響一切都被渲染...這可能是一個好的和壞的東西......

下一個問題是,你不能真正的AppContext中訪問StyleSheet作爲DEFAULT_STYLES_KEYprivate static final Object ...

這意味着你必須創建一個實例HTMLEditorKit並使用getStyleSheet來獲得對它的引用...

Link

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.text.html.HTMLEditorKit; 
import javax.swing.text.html.StyleSheet; 
import sun.awt.AppContext; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       HTMLEditorKit kit = new HTMLEditorKit(); 
       StyleSheet styleSheet = kit.getStyleSheet(); 
       styleSheet.addRule("a {color:#ff0000;}"); 

       JLabel label = new JLabel("<html><a href=http://stackoverflow.com/questions/tagged/java>Stackoverflow</a></html>"); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(label); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+0

你證明你的手柄:) Thankyou的幫助。我現在可以繼續爲Netbeans用戶提供更好的外觀和感覺(http://plugins.netbeans.org/plugin/40985/ez-on-da-ice))。 – ShaggyInjun 2014-11-05 05:14:55

+1

很高興幫助;) – MadProgrammer 2014-11-05 05:16:53