2014-09-02 159 views
1

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

谢谢。

+0

它是否是GUI特定的?或者你一般指的是“使用构造函数还是静态方法来创建新实例”? – 2014-09-02 19:00:21

+0

是GUI特定的。我只是好奇,因为你可以用几种不同的方式做到这一点。只是想知道我是否应该遵循标准或建议的路径。 – Noneedname 2014-09-02 19:17:21

回答

0

很适合我(的JavaFX):

我喜欢的东西实际上是在后台这样ofcourse正在进行的应用程序的启动,显示用户:预加载器是必须的,在代码我加载所有需要数据/访问数据库/准备应用程序首选项,然后是INITIALIZE CONTROLLER/VIEW。

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

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

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

(I保持一对一的关系,每FXML文件(视图)具有其自己的控制器,当数据必须采取并从控制器逻辑分离additionaly有时模型)

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

我认为在摆动你必须更仔细地通过你的UI初始化过程,当你没有定义的控制器fxml例如。

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

这些是我做的事情,这让我避免了Sphagetti代码。 我从swing学到了我的教训,我觉得我试图将BRUTE FORCE MVC加入到我的设计中,然后无法理解我的代码。

我希望这可以帮助你。在我看来,没有任何一种正确的做事方式。个人喜好,你使用的技术,你创建的软件类型,都是这方面的因素。

+0

伟大的职位。谢谢。不幸的是,我不能设计高级用户界面,所以JavaFX离我有点远。我的问题更多地基于一个简单的swing GUI,以及从main调用该GUI的正确方法。我从你的评论中了解到,没有正确的做法。谢谢。 – Noneedname 2014-09-02 19:25:27

+0

@Noneedname问问你自己什么更可读,对于小应用程序只需通过一些私有静态方法初始化,复杂系统将有不同的过程等。最重要的是,你和阅读你的源内核的人了解正在发生的事情。对于我的小程序,我使用了类的初始化,这对我来说更有意义。我建议你找一本关于软件设计/架构的好书,并开始阅读;)即使它不直接针对guis,你仍然会受益从那里的建议,这些问题将更有意义。 – 2014-09-02 19:36:32

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,其初始化图形用户界面和设置可见:

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

在@ pzaenger的回应中,“Main”是控制器,“GUI”是视图。 Swing将这个问题混淆了一些,因为大多数swing组件都在MVC模式中为视图和控制器角色提供服务。然而,我经常使用他描述的模式 - 添加一个单独的模型类,它维护应用程序范围内的偏好和视图状态(例如屏幕位置和窗口大小)。在GUI的角色上明确自己:它是视图还是控制器,还是只是视图?在这个模型中,这只是视图。与您在GUI中嵌入的任何内容相同。 – 2014-09-02 19:59:35