2014-11-05 70 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