Java中调用GUI的正确方法

Java中调用GUI的正确方法,java,user-interface,Java,User Interface,我想知道是否有一种调用GUI方法的标准方法。例如,我可以创建一个名为GUI的类,并使用构造函数创建新的GUI并查看用户界面。或者,我可以在GUI类中创建一个公共静态方法,并从main调用它。我想知道这样做是对还是错。或者你可以自己指定你喜欢的方式 谢谢。对我来说很好(JavaFX): 我喜欢在应用程序开始时向用户显示后台确实发生了一些事情,所以当然:预加载是必须的,在代码中,我加载所有必要的数据/访问数据库/准备应用程序首选项,然后初始化控制器/视图 在我的main中,我确实使用了多种方法来完成

我想知道是否有一种调用GUI方法的标准方法。例如,我可以创建一个名为GUI的类,并使用构造函数创建新的GUI并查看用户界面。或者,我可以在GUI类中创建一个公共静态方法,并从main调用它。我想知道这样做是对还是错。或者你可以自己指定你喜欢的方式

谢谢。

对我来说很好(JavaFX):

我喜欢在应用程序开始时向用户显示后台确实发生了一些事情,所以当然:预加载是必须的,在代码中,我加载所有必要的数据/访问数据库/准备应用程序首选项,然后初始化控制器/视图

在我的main中,我确实使用了多种方法来完成这个过程。将初始化分解为多个部分

我认为视图是应用程序启动时最后要做的事情

Javafx有一个很好的结构,它可以迫使您不要搞砸,您可以通过线性路径进行初始化。我使用主控制器和子控制器。主控制器几乎每次都会根据需要使用参数进行初始化,当子控制器没有在fxml中定义时,它们也是如此

(我保持一对一的关系,每个fxml文件(视图)都有自己的控制器,另外,当数据必须从控制器逻辑中提取和分离时,有时还需要建模)

对于控制器之间的某些共享数据,我使用多个模型(相同结构的主模型/子模型)

我认为在swing中,当您没有定义控制器的fxml时,您必须更加小心地完成UI初始化过程

我喜欢做的另一件事是拥有从main方法到所有ma主控制器/模型的静态访问权限,在这里我可以直接访问代码的许多重要部分

这些就是我所做的事情,让我避免使用Sphagetti代码。 我从swing中学到了一些经验,我觉得我试图强行将MVC加入到我的设计中,但却无法理解我的代码


我希望所有这些都能对你有所帮助。在我看来,做事情的正确方法并不是只有一种。个人喜好、你使用的技术、你创建的软件类型,都是其中的因素。

对于我自己,我有以下解决方案,在我看来,这些解决方案是明确的,并提供了一个很好的概述

GUI本身在包
视图
中的类
GUI
中定义,可能如下所示:

package view;

import javax.swing.JFrame;
import controller.GameController;

public class GUI extends JFrame {
    // A controller class
    private GameController gameController;

    public GUI(String title, GameController gameController) {
        super(title);

        setSize(600, 400);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);

        this.gameController = gameController;
    }
}
现在我在包
controller
中有了类
Main
,它初始化GUI并将其设置为可见:

package manager;

import javax.swing.SwingUtilities;

import view.GUI;
import controller.GameController;

public class Main {
    private static GUI gui;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                gui = new GUI("Title", new GameController());
                gui.setVisible(true);
            }
        });
    }
}

这对我很有效。使用
gameController
您现在可以通过视图中的一些用户操作与该控制器类交互,以更改您的模型。也许这对你有点帮助。也许有更好的办法;)

它是特定于GUI的吗?或者您通常指的是“使用构造函数或静态方法来创建新实例”?是的,特定于GUI。我只是好奇,因为你可以用几种不同的方法来做。只是想知道是否有一个标准或建议的路径,我应该遵循。伟大的帖子。非常感谢。不幸的是,我无法设计高级用户界面,所以JavaFX离我有点远。我的问题更多的是基于一个简单的swing GUI以及从主界面调用该GUI的正确方式。我从你的评论中了解到没有正确的方法。谢谢。@Noneedname问自己什么更可读,因为小应用程序只需通过一些私有静态方法在main中初始化,复杂的系统会有不同的过程等等。最重要的是,你和阅读你的源代码核心的人了解发生了什么。对于我的小程序,我使用了类初始化,因为它对我更有意义。我建议你找一些关于软件设计/体系结构的好书,开始阅读;)即使它不是直接针对GUI的,您仍然会从那里的建议中受益,这些问题将更有意义。在@pzaenger的回答中,“Main”是控制器,“GUI”是视图。Swing稍微混淆了这个问题,因为大多数Swing组件在MVC模式中同时充当视图和控制器角色。不过,我经常使用他描述的模式——添加一个单独的模型类,用于维护应用程序范围的首选项和视图状态(例如屏幕位置和窗口大小)。明确GUI的角色:是视图和控制器,还是仅仅是视图?在这个模型中,它只是视图。嵌入到GUI中的任何东西都是一样的。