java - 如何一次更改已分配字体的多个组件中的字体?

标签 java swing fonts jframe awt

如何在生成 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/

相关文章:

ios - UITextView 字体反转回系统默认

java - 如何在 Future 对象中有效使用 isDone()

java - 跟踪java中的随机数

java - 我看到错误 : A message body writer for Java class java. util.ArrayList 和 Java 类型 java.util.List<java.lang.String>

java - JFrame 未正确加载

java - 如何从长方法中更新 swing GUI?

java - 如何在 java swing 应用程序中显示验证码

fonts - DirectWrite (CreateTextFormat) 如何选择后备字体?

css - Bootstrap 3 : font family within a glyphicon span

java - 为什么 Java 中的枚举方法总是返回最后一个值响应?