netbeans 设置不同的外观对从主类打开的Java类无效

eit6fx6z  于 2022-11-10  发布在  Java
关注(0)|答案(2)|浏览(190)

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

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

当我在NetBeans中右键单击.java文件并选择“运行文件”来分别运行每个类时,外观和感觉工作得很好。(真的)在JFrame上,外观和感觉不起作用。我想这可能只是NetBeans的一个错误,所以我试着构建.jar并运行它。问题仍然存在。主类的外观和感觉已经用相同的代码设置了,并且运行得很好。我不知道该怎么做。任何帮助都是感激的。

k7fdbhmy

k7fdbhmy1#

JavaDocs of UIManager
外观及感觉变更后,必须在所有JComponents上叫用updateUI。方法SwingUtilities.updateComponentTreeUI(java.awt.Component)可让您轻松地将updateUI套用至内含项目阶层。请指涉它以取得详细数据。变更外观及感觉后不叫用updateUI的确切行为尚未指定。很可能会收到未预期的例外状况、绘制问题或更糟的情况。
如果在创建框架之后更改了外观(即使它们还不可见),则需要updateUI才能使更改生效(或者更好的方法是,如果您知道自己总是希望使用特定的外观,则在创建框架之前在主类中设置该外观)。

izkcnapc

izkcnapc2#

是的。同样的问题。如果在创建表单之前设置LookAndFeel,则全部工作)如果在创建之后设置,则可能不工作)
已安装的LookAndFeel可以显示

LookAndFeelInfo [] lf = UIManager.getInstalledLookAndFeels();
        for(int n = 0; n < lf.length; n++) {
            System.out.println(lf[n].getClassName());
        }

相关问题