我的Java程序有多个类,每个类包含一个单独的JFrame。所有这三个JFrame都是在我的主类中启动的,并且都设置为setVisible(false),因此它们是隐藏的。单击JPopUpMenu中的按钮时,相应的JFrame设置为setVisible(true)。在这些类中,我定义了:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
当我通过右键单击NetBeans中的.java文件并选择“运行文件”来分别运行每个类时,外观非常完美。但是,当我在JFrame上运行主类和setVisible(true)时,外观不起作用。我认为这可能只是NetBeans的错误,所以我尝试构建.jar并运行它。问题仍然存在。主类的外观使用相同的代码设置,并且效果很好。我不确定该怎么办。任何帮助表示赞赏。
最佳答案
从JavaDocs of UIManager:
外观更改后,必须在所有updateUI
上调用JComponents
。使用方法SwingUtilities.updateComponentTreeUI(java.awt.Component)
可以轻松地将updateUI
应用于包含层次结构。详情请参阅。未更改更改外观后不调用updateUI
的确切行为。很可能会收到意外的异常,绘画问题或更糟的情况。
如果在创建框架后更改外观(即使它们尚不可见),则需要updateUI
才能使更改生效(或者,更好的是,如果您知道总是要使用的话)然后先在主类中设置特定的外观,然后再首先创建框架。