在Java中调用GUI的正确方法

时间:2014-09-02 18:53:36

标签: java user-interface

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

谢谢。

2 个答案:

答案 0 :(得分:2)

对于我自己,我有以下基于MVC的解决方案,在我看来,这个解决方案很清晰,并提供了很好的概述。

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

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;
    }
}

现在我在包Main中有一个类controller,它初始化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,您现在可以通过视图中的一些用户操作与此控制器类进行交互以更改模型。也许这对你有所帮助。可能有更好的方法;)

答案 1 :(得分:0)

对我来说(JavaFX):

我喜欢在应用程序开始时向用户显示某些内容实际上是在后台进行的,所以当然:Preloader是必须的,在代码中我加载所有necessery数据/访问数据库/准备应用程序首选项然后INITIALIZE控制器/ VIEW。

我确实使用多种方法在我的main中通过这个过程。将初始化分成多个部分。

我认为视图是应用程序启动时的最后一件事。

Javafx有一个很好的结构,迫使你没有MESS UP,你通过初始化的线性路径。我使用主控制器和子控制器。主控制器几乎每次都根据需要初始化参数,同样适用于子控制器没有在fxml中定义。

(我保持一对一的关系 - 每个fxml文件(视图)都有自己的控制器,另外有时必须建模数据时必须采取数据并与控制器逻辑分开)

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

我认为,如果你没有定义控制器的fxml,你必须更加小心你通过UI初始化过程的确切方式。

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

这些是我做的事情,这让我避免使用Sphagetti代码。 我从摇摆中吸取了教训,我觉得我试图将MVC强制转换为我的设计,然后无法理解我的代码。

我希望这对你有所帮助。在我看来,只有一种正确的做事方式。个人喜好,你使用的技术,你创造的软件类型,都是这个因素。 / p>