java - 打开启动 Swing 界面的首选方法是什么?有什么区别?

标签 java swing user-interface runnable

所以我找到了多种在 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/

相关文章:

java - LibGDX 在屏幕之间切换导致 UI 按钮无法正确加载

JAVA GUI 关闭应用程序对话框

java - 在 File.createTempFile() 上使用 Files.copy() 时出现 FilesAlreadyExistsException

java - JDialog 不显示最小化/关闭按钮

java - 使用 [context].xml 和 web.xml 来配置网络应用程序

java - 双击重复按下按钮的次数

java - 如何只选择 jtable 中一行中的单元格?

java - 按住键时键绑定(bind)会多次触发

java - 静态库的导入如何在 Java/Spring 中工作?

java - LoggerFactory - 输出位置