Swing允许在组件中使用html JLabel
.本文件详细讨论了这一点.它还显示了如何更改特定文本的颜色.
我正在使用包含数千个此类组件的现有swing应用程序.我想改变使用它的链接的颜色.一次做一个将是非常乏味的.默认情况下,如果未指定颜色,则swing似乎将其呈现为蓝色.
如何将此默认值更改为其他内容?
所以,经过深入挖掘代码,我学到了......
HTMLEditorKit
关联的API 呈现HTMLEditorKit
是在AppContext中集中/全局维护的...从 HTMLEditorKit#getStyleSheet
AppContext appContext = AppContext.getAppContext();
StyleSheet defaultStyles = (StyleSheet) appContext.get(DEFAULT_STYLES_KEY);
Run Code Online (Sandbox Code Playgroud)
这有点重要,因为它意味着,您不会花费大量时间来尝试查看标签的外观和感觉代码而且您应该能够在一个地方更改全局样式表并影响所有内容的获取方式渲染......这可能是一件坏事......
接下来的问题是,你实际上无法访问StyleSheet
内部,AppContext
因为它DEFAULT_STYLES_KEY
是private static final Object
...
这意味着您必须创建一个实例HTMLEditorKit
并使用它getStyleSheet
来获取它的引用...
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);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
690 次 |
最近记录: |