设置不同的外观并不适用于从主类打开我的java类

时间:2014-02-02 21:18:01

标签: java swing netbeans jframe look-and-feel

我的java程序有多个类,每个类都包含一个单独的JFrame。所有三个JFrame都在我的主类中启动,并设置为setVisible(false),因此它们被隐藏。单击JPopUpMenu中的按钮时,相应的JFrame将设置为setVisible(true)。在这些课程中我定义了:

 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

当我通过右键单击NetBeans中的.java文件并选择“运行文件”来单独运行每个类时,外观和效果完美无缺。但是,当我在JFrame上运行主类和setVisible(true)时,外观不起作用。我认为这可能只是NetBeans的一个错误,所以我尝试构建.jar并运行它。问题仍然存在。主类的外观和感觉使用相同的代码设置,并且完美地运行。我不知道该怎么做。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

来自JavaDocs of UIManager

  

外观改变后,必须在所有updateUI上调用JComponents。方法SwingUtilities.updateComponentTreeUI(java.awt.Component)可以轻松将updateUI应用于包含层次结构。有关详细信息,请参阅它。更改外观后未调用updateUI的确切行为未指定。很可能会收到意外的异常,绘画问题或更糟糕的情况。

如果您在创建框架后更改外观(即使它们尚未显示),则需要updateUI才能使更改生效(或更好,如果您知道自己总是想要使用特定的外观,然后在首先创建框架之前在主类中设置它。)