java swing 通过UIManager怎么能动态改变字体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java swing 通过UIManager怎么能动态改变字体?相关的知识,希望对你有一定的参考价值。

我想通过点击按钮改变表格中文字的字体和字号,为什么不好用呢?
说SetFont的就算了,我只想知道怎么通过UIManager改变字体,改变LookAndFeel的时候能够改变界面的风格,但是却改不了字体,为什么啊??
static Frame f = new Frame("test");
public static void main(String[] args)
UIManager.put("Table.font", new Font("楷体",0,20));
button.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
UIManager.put("Table.font", new Font("宋体",0,12));
SwingUtilities.updateComponentTreeUI(f);

);
//。。。。。。字数不够,请脑补
f.setVisible(true);

我觉得应该要repaint一下,才能改变!追问

SwingUtilities.updateComponentTreeUI 的源码我看了,里面会repaint的。

追答
look = UIManager.getInstalledLookAndFeels();
try

UIManager.setLookAndFeel(look[0].getClassName());
initGlobalFontSetting(new Font("华文彩云",0,15));
SwingUtilities.updateComponentTreeUI(this);

catch(Exception ee)

ee.printStackTrace();

// 设置全局字体
public static void initGlobalFontSetting( Font fnt )

FontUIResource fontRes = new FontUIResource(fnt);
for( Enumeration keys = UIManager.getDefaults().keys(); keys
.hasMoreElements(); )

Object key = keys.nextElement();
Object value = UIManager.get(key);
if(value instanceof FontUIResource)
UIManager.put(key, fontRes);

追问

问题已经解决了,通过UIManager更改字体的时候不能直接设置Font,要使用FontUIResource,我也是刚刚查看JDK的文档才知道的,你给的这段代码也是正确的,分给你了,谢谢你。
参考:http://doc.java.sun.com/DocWeb/api/all/javax.swing.LookAndFeel
共同学习。

参考技术A 设置完字体后调用 SwingUtilities.updateComponentTreeUI(Component c)追问

不好用啊!!!我用的就是SwingUtilities.updateComponentTreeUI(Component c),但是LookAndFeel界面风格能改变,就是字体改变不了!!!我的代码超长了,复制不上来 郁闷。

以上是关于java swing 通过UIManager怎么能动态改变字体?的主要内容,如果未能解决你的问题,请参考以下文章

在swing组件中显示时所使用的字体可以用啥方法来设置

如何让Java Swing Application在windows和linux中字体一致?

javaswing 带滚动条文本域边框问题

Java如何做出好看的本地文件选择器

Kotlin - 静态 Java 方法的“运行”

Java界面制作之四种界面风格