创建Swing Java应用程序的正确方法

时间:2017-12-18 00:01:38

标签: java swing user-interface constructor

我之前有过在学校学习应用程序的经验,所以我知道它们是如何工作的并且设计得很好,但我不确定设置应用程序的最佳方法。

我们只在学校创建了较小的程序,所以我们在构造函数中几乎拥有了所有代码,但我想创建更大的东西,并且不确定我应该如何设置。

我的基类有构造函数,它将创建我将在整个应用程序中使用的JFrame,但是我要添加组件或使用动作侦听器来创建哪些类?我完全不确定这样做的正确方法,所以指导步骤会很棒。

这是我的类声明/构造函数:

public class SwingApp1 extends JFrame{

    public SwingApp1() {
        setTitle("Greens Tracker");
        setSize(800,500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

}

现在我应该在主要内容中添加什么,以及在添加组件时应该采用什么样的方式?

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

设置JFrame的好方法是

public GUI() {
    buildGUI();
}

private void buildGUI() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setSize(500, 300);
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new GUI().setVisible(true);
        }
    });

}

我希望它有所帮助:)。

答案 1 :(得分:0)

程序从主程序开始:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new SwingApp1().setVisible(true);
        }
    });
}

可以从Java 8缩写为:

public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> new SwingApp1().setVisible(true));
}

JFrame构造函数可以如下所示。一个setVisible我留给电话, 并pack()将布置内容。

public SwingApp1() {
    setTitle("Greens Tracker");
    setSize(800,500);
    ... add components, maybe in a separate method.
    pack();
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

实际上看看MVC,模型视图控制器。

我通常将XyzApplication类视为 controller ,JFrame是主视图,而单独保存的数据(在应用程序中)是模型

应该提到的是,没有FXML布局文件,JavaFX可能稍微更可取。更多的学习涉及,但更好的行为。

其他建议是使用 maven 等构建基础架构。这有助于库(“依赖项”)并提供“最佳实践”,如构建目录(src / main / java,src / test / java,src / main / resources ...)。

当然是版本控制系统,如git或mercurial。