Java 如何一次更改已指定字体的多个组件中的字体?

Java 如何一次更改已指定字体的多个组件中的字体?,java,swing,fonts,jframe,awt,Java,Swing,Fonts,Jframe,Awt,在生成UI后,如何将一个应用不同字体的应用程序更改为多个组件或整个JFrame或整个Swing应用程序,其中一些组件已经分配了字体 我试图做的任务是在加载时将不同的或自定义的字体更改并应用到JFrame中,JFrame位于NetBeans项目中,因此一些组件已经通过其自动生成的方法分配了字体 到目前为止,我已经尝试使用UIManager将字体设置为默认键,然后调用SwingUtilities.updateComponentTreeUI(jframe)但它仅将字体应用于尚未指定字体的组件。下面是我

在生成UI后,如何将一个应用不同字体的应用程序更改为多个组件或整个JFrame或整个Swing应用程序,其中一些组件已经分配了字体

我试图做的任务是在加载时将不同的或自定义的字体更改并应用到JFrame中,JFrame位于NetBeans项目中,因此一些组件已经通过其自动生成的方法分配了字体

到目前为止,我已经尝试使用
UIManager
将字体设置为默认键,然后调用
SwingUtilities.updateComponentTreeUI(jframe)但它仅将字体应用于尚未指定字体的组件。下面是我是如何尝试的(以…为例)

然后打电话

SwingUtilities.updateComponentTreeUI(jframe);
this.validate();
this.repaint();
由于没有完全成功,我尝试在JFrame中的所有组件中设置字体,然后调用
validate()后接
重绘(),但它没有产生任何效果。我就是这样做的

        Component[] comps = this.getComponents();
        for (Component comp : comps){
            comp.setFont(font);
        }
然后打电话

SwingUtilities.updateComponentTreeUI(jframe);
this.validate();
this.repaint();
我是否正确地完成了前面的步骤,或者是否有任何错误?如果没有,完成任务的正确方法是什么?而且,即使我需要更改所有组件中的字体,也需要保留它们现有的字体大小和字体样式


谢谢大家!

将可插拔的外观更改为(可能是定制的)PLAF是最好、最健壮的方法。有关如何在GUI可见后更改PLAF的提示,请参阅

有关更多详细信息,请参阅Java教程的课程。有关使用两个不同PLAF的一个用户界面的示例,请参见下文


将可插拔的外观更改为(可能是定制的)PLAF是最好、最健壮的方法。有关如何在GUI可见后更改PLAF的提示,请参阅

有关更多详细信息,请参阅Java教程的课程。有关使用两个不同PLAF的一个用户界面的示例,请参见下文


你能展示一下代码“因为没有完全成功,所以我尝试在JFrame的所有组件中设置字体”吗?对我来说,它应该没问题,为了更好的帮助,请尽快发布一个/,简短的可运行的,可编译的。谢谢你们两位的建议和指导。我已经用我在尝试中使用的代码更新了这个问题。我希望我做得对。updateComponentTree应该可以工作-如果没有问题,您没有显示的代码有问题(请阅读文章@mKorbel reference,您的代码片段不是帮助您所需要的)您可以显示代码“因为它不完全成功,所以我尝试在JFrame中的所有组件中设置字体”? 对我来说,它应该没问题,为了更好的帮助,请尽快发布一个/,简短的可运行的,可编译的。谢谢你们两位的建议和指导。我已经用我在尝试中使用的代码更新了这个问题。我希望我做得对。updateComponentTree应该可以工作-如果没有,您没有显示的代码有问题(请阅读文章@mKorbel reference,您的代码片段不是帮助您所需要的),谢谢您的指导。到目前为止,我唯一能做到这一点的方法似乎是使用
SynthLookAndFeel
并定义字体,因为我需要的是将整个应用程序的默认字体更改为我喜欢的自定义字体,否则我还需要了解更多信息。我会及时更新我的进度。再次感谢。我肯定会+1这个,但我没有15个这样做的声誉。哈哈。的确有了你的帮助,我不再缺少它了。谢谢!:)顺便说一句-如果答案有助于解决问题,请随意回答。抱歉花了很长时间才接受它。在有限的时间里,我很难尝试这些。然而我必须说,你向我展示的道路是绝对正确的,我通过修改LAF完成了任务,但我仍然有很多东西需要学习,你给我的指导将引导我通过它。再次感谢!:)谢谢你的指导。到目前为止,我唯一能做到这一点的方法似乎是使用
SynthLookAndFeel
并定义字体,因为我需要的是将整个应用程序的默认字体更改为我喜欢的自定义字体,否则我还需要了解更多信息。我会及时更新我的进度。再次感谢。我肯定会+1这个,但我没有15个这样做的声誉。哈哈。的确有了你的帮助,我不再缺少它了。谢谢!:)顺便说一句-如果答案有助于解决问题,请随意回答。抱歉花了很长时间才接受它。在有限的时间里,我很难尝试这些。然而我必须说,你向我展示的道路是绝对正确的,我通过修改LAF完成了任务,但我仍然有很多东西需要学习,你给我的指导将引导我通过它。再次感谢!:)