Java 在从另一个类调用时不会改变外观



我是Java的新手,在尝试更改Java文件的外观时遇到问题。我有两个班级,main.javaauth.java。我已经在auth.java文件中将外观和感觉设置为nimbus。当我尝试从main.java调用身份验证类时(我在下面附加了代码片段),UI不会改变。但是当我使用 public static void main(String[] args) in auth.java并尝试单独运行该文件,jFrame的 UI 会更改。请让我知道是否有办法在从另一个类调用时更改jFrame的 UI。从another class调用jFrame有任何问题,这是一种好的做法吗?因为我们正在做一个大项目,并且偶尔需要调用身份验证框架,所以有什么建议吗?提前谢谢大家!:)

主.java:

package com.package.name;
public class main {
    public static void main(String[] args) {
        new auth();
    }
}

这是我的身份验证.java代码的一部分:

package com.package.name;
import javax.swing.*; 
import java.awt.*;
public class auth extends JFrame {
    public auth() {
        initComponents();
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel ( "javax.swing.plaf.nimbus.NimbusLookAndFeel" );
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (UnsupportedLookAndFeelException e) {
                    e.printStackTrace();
                }
                setVisible(true);
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                pack();
            }
        });
    }

在更改外观之前,您已经调用了initComponents。 这会将当前安装的外观安装到这些组件中。

无需指示每个组件更新其 UI,您只需将外观的安装与 initComponents 方法交换

,例如......
try {
    UIManager.setLookAndFeel ( "javax.swing.plaf.nimbus.NimbusLookAndFeel" );
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (InstantiationException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
    e.printStackTrace();
}
initComponents();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();

现在,话虽如此。 在调用 auth 构造函数之前,您确实应该在 EDT 的上下文中,auth不应该真正做出有关外观和感觉的决定。 如果您想以不同的外观再次使用此框架,会发生什么情况?

相反,可以做一些更像的事情

public class main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel ( "javax.swing.plaf.nimbus.NimbusLookAndFeel" );
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (UnsupportedLookAndFeelException e) {
                    e.printStackTrace();
                }
                new auth();
            }
        });
    }
}
public class auth extends JFrame {
    public auth() {
        initComponents();
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
    }

您还应该考虑查看Java编程语言的代码约定,这将使您的代码更易于阅读;)

最新更新