如何在生成 UI 后更改应用不同的字体到多个组件或整个 JFrame 或整个 Swing 应用程序,哪些组件已经分配了字体?? p>
我正在尝试做的任务是在加载时更改并将不同的或自定义的字体应用到 JFrame 中,这是在 NetBeans 项目中,因此一些组件已经通过其自动生成的方法分配了字体。
到目前为止,我已尝试使用 UIManager
将字体设置为其默认键,然后调用 SwingUtilities.updateComponentTreeUI(jframe);
但它仅将字体应用于尚未分配字体的组件。以下是我的尝试方式(以 this answer 为例)。
Enumeration enc = UIManager.getDefaults().keys();
while (en.hasMoreElements() ) {
Object key = en.nextElement();
Object value = UIManager.get(key);
if (value instanceof Font) {
UIManager.put(key, font);
}
}
然后调用,
SwingUtilities.updateComponentTreeUI(jframe);
由于没有完全成功,于是我尝试在 JFrame 中的所有组件中设置字体,然后调用 validate();
然后调用 repaint();
,但它没有任何效果。这就是我尝试这样做的方式。
Component[] comps = this.getComponents();
for (Component comp : comps){
comp.setFont(font);
}
然后调用,
this.validate();
this.repaint();
我是否正确完成了前面的步骤,或者我是否犯了任何错误?如果不是,完成任务的正确方法是什么?而且,即使我需要更改所有组件中的字体,也需要保留它们现有的字体大小和字体样式。
谢谢!
最佳答案
将 Pluggable Look and Feel 更改为(可能是自定义的)PLAF 是最好、最稳健的方法。参见 this answer有关如何在 GUI 可见后更改 PLAF 的提示。
参见 Modifying the Look and Feel有关更多详细信息,请参阅 Java 教程的类(class)。有关使用两个不同 PLAF 的一个用户界面的示例,请参见下文。
关于java - 如何一次更改已分配字体的多个组件中的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21182492/