我是Java的新手,在尝试更改Java文件的外观时遇到问题。我有两个班级,main.java
和auth.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编程语言的代码约定,这将使您的代码更易于阅读;)