所以我找到了多种在 java 中实现 swing GUI 的方法,但不知道每种方法的作用,而且我的老师也无法帮助我。创建 JFrame 的一种方法是:
import javax.swing.*;
import java.awt.*;
public class UI extends JFrame{
public UI() {
initaliseGUI();
}
private void initaliseGUI(){
setTitle("My Title");
setBackground(Color.red);
setSize(800,500);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
UI M = new UI();
M.setVisible(true);
}
});
}
但实现它的另一种方法是:
import javax.swing.*;
import java.awt.*;
public class Main{
public static void main(String[] args){
JFrame window = new JFrame();
window.setSize(500,500);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = window.getContentPane();
c.setBackground(Color.red);
window.setBackground(Color.red);
window.setTitle("main");
JLabel message = new JLabel("JLabel");
window.add(message);
window.setVisible(true);
}
}
每种方法的工作方式有何区别,何时应该使用其中一种而不是另一种,以及在这种情况下可运行程序如何工作?
谢谢!
最佳答案
您的第一个示例调用 EventQueue invokeLater 方法,但扩展了 JFrame。
您的第二个示例将所有内容都放在静态方法 main 中,并且不运行 invokeLater 方法。
这是启动 Swing 应用程序的一种方法。
public class TryingProject2 implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TryingProject2());
}
@Override
public void run() {
JFrame frame = new JFrame("Color Gradient Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createMainPanel());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createMainPanel() {
JPanel panel = new JPanel();
// Add your Swing components here
return panel;
}
}
我不扩展 Swing 组件。我使用 Swing 组件。扩展 Swing 组件或任何 Java 类的唯一时间是当您想要重写其中一个类方法时。
SwingUtilities invokeLater 方法与 EventQueue invokeLater 方法相同。该方法将所有Swing组件的创建和更新放在Event Dispatch thread上.
我实现了 Runnable,因为它使 invokeLater 方法参数成为该类的实例。
我用一种方法创建主面板,以将 JFrame 代码与 JPanel 代码分开。
关于java - 打开启动 Swing 界面的首选方法是什么?有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165655/