打开摆动界面的首选方法是什么?有什么区别?

时间:2016-02-02 23:15:54

标签: 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);
    }
}

每个人的工作方式和我应该在何时使用另一个之间有什么区别?在这种情况下,runnable如何工作?

三江源!

1 个答案:

答案 0 :(得分:2)

您的第一个示例调用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代码分开。