Java没有';当从另一个类调用时,不会更改外观
我是java新手,在尝试更改从另一个类调用的java文件的外观时遇到了一个问题。我有两个类,Java没有';当从另一个类调用时,不会更改外观,java,swing,look-and-feel,nimbus,Java,Swing,Look And Feel,Nimbus,我是java新手,在尝试更改从另一个类调用的java文件的外观时遇到了一个问题。我有两个类,main.java和auth.java。我在auth.java文件中将外观设置为nimbus。当我尝试从main.java调用auth类时(我已经附上了下面的代码片段),UI没有改变。但是当我使用 auth.java中的publicstaticvoidmain(String[]args)并尝试单独运行该文件jFrame的UI会发生更改。当从另一个类调用jFrame时,请告诉我是否有方法更改其UI。从另一个
main.java
和auth.java
。我在auth.java
文件中将外观设置为nimbus。当我尝试从main.java调用auth类时(我已经附上了下面的代码片段),UI没有改变。但是当我使用
auth.java中的publicstaticvoidmain(String[]args)并尝试单独运行该文件jFrame
的UI会发生更改。当从另一个类调用jFrame
时,请告诉我是否有方法更改其UI。从另一个类调用jFrame
是否有问题,这是一个好的做法吗?因为我们正在做一个大项目,需要偶尔调用一次身份验证框架,所以有什么建议吗?
提前谢谢大家!:)
main.java:
package com.package.name;
public class main {
public static void main(String[] args) {
new auth();
}
}
这是我的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();
}
你也应该考虑浏览一下,它会让你的代码更容易阅读;p> 在更改外观之前,您已经调用了
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();
}
你也应该考虑浏览一下,它会让你的代码更容易阅读;p> 有错误消息吗?没有。。什么都没有,只是当我们试图从main调用auth类时使用的旧java laf有任何错误消息吗?没有。。没什么,只是在我们尝试从main调用auth类时使用了相同的JavaLAF。是的,我一开始尝试了这个方法,效果非常好。但是我认为我们需要在相应的类中声明laf本身。!:)谢谢你,伙计。还有一个问题,如果我有另一门课,我想把它改成LAF呢?只需添加新的class2();到主类就可以了?一旦你安装了look-and-feel,所有新创建的组件都将使用,这就是为什么你首先会遇到问题的原因。所以,是的,只要继续创建对象,它们就会使用相同的外观和感觉。是的,我一开始尝试了这种方法,效果非常好。但是我认为我们需要在相应的类中声明laf本身。!:)谢谢你,伙计。还有一个问题,如果我有另一门课,我想把它改成LAF呢?只需添加新的class2();到主类就可以了?一旦你安装了look-and-feel,所有新创建的组件都将使用,这就是为什么你首先会遇到问题的原因。所以,是的,只要继续创建对象,它们就会使用相同的外观和感觉。