2014-09-02 77 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

相關問題