创建Swing Java应用程序的正确方法
我以前在学校有一些swing应用程序的经验,所以我知道它们是如何工作的,并且会很好地设计它们,但我不确定设置应用程序的最佳方式 我们在学校只创建了较小的程序,所以我们几乎所有的代码都在构造函数中,但我想创建更大的程序,我不确定应该如何设置 我有一个带有构造函数的基类,它将创建我的JFrame,我将在整个应用程序中使用它,但是我要创建哪些类来添加我的组件,或者使用动作侦听器呢?我不确定如何正确地做到这一点,所以一个指导性的步骤将是伟大的 这是我的类声明/构造函数:创建Swing Java应用程序的正确方法,java,swing,user-interface,constructor,Java,Swing,User Interface,Constructor,我以前在学校有一些swing应用程序的经验,所以我知道它们是如何工作的,并且会很好地设计它们,但我不确定设置应用程序的最佳方式 我们在学校只创建了较小的程序,所以我们几乎所有的代码都在构造函数中,但我想创建更大的程序,我不确定应该如何设置 我有一个带有构造函数的基类,它将创建我的JFrame,我将在整个应用程序中使用它,但是我要创建哪些类来添加我的组件,或者使用动作侦听器呢?我不确定如何正确地做到这一点,所以一个指导性的步骤将是伟大的 这是我的类声明/构造函数: public class Swi
public class SwingApp1 extends JFrame{
public SwingApp1() {
setTitle("Greens Tracker");
setSize(800,500);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}
现在,我应该在我的main中添加什么,我应该在哪个manor中添加组件
感谢您的帮助,谢谢 设置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);
}
});
}
我希望它能有所帮助:)该计划从以下主要方面开始:
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构造函数可以如下所示。我留下一个电话,
而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类作为控制器,JFrame是主视图,单独保存的数据(在应用程序中)是模型
应该提到的是,JavaFX可能稍微更可取一些,比如说没有FXML布局文件。需要更多的学习,但要有更好的行为
其他建议是使用像maven这样的构建基础设施。这有助于处理库(“依赖项”),并提供“最佳实践”,如构建目录(src/main/java、src/test/java、src/main/resources…)
当然,像git或mercurial这样的版本控制系统。这是一个广泛的问题(有些人认为是什么)。作为一般建议,您应该避免直接从顶级容器进行扩展,例如
JFrame
,它们将您的代码耦合到单个用例中,并减少重复使用的可能性。此外,您并没有真正向类添加任何新功能,此外,您的构造函数还有一个副作用(使窗口可见)@MadProgrammer说了什么,我还要补充一点,当存在其他更好支持的GUI库(即JavaFX)时,您确定要使用一个半弃用的库来创建GUI吗?特别是如果现在图书馆的选择不是由学术要求决定的话。作为一般性建议,我总是喜欢从JPanel
开始,它很容易定制,可以添加到我需要的任何容器中(JFrame
,JDialog
,其他一些容器),并以此为基础构建我的UI。您还应该确保在事件调度线程的上下文中启动UI,以避免可能出现的故障和错误issues@HovercraftFullOfEels我只是对Swing有点熟悉,所以我想从那里开始可能会更容易。这个JavaFX,它有很多不同/更好吗?我不能说得更好,因为我不太了解它(@MadProgrammer可以回答这个问题),但它的主要优点是它得到了支持。无论您选择哪一种,都要努力将您的逻辑从视图中分离出来,并使用la MVC(model view controller),这样,如果您以后想要更改GUI库,就可以更轻松地进行更改。