2010-08-10 75 views
2

我正在爲一些代碼構建Java GUI,並且我對某些設計方面不太確定。Java GUI構建技巧?

作爲一些背景 - 該GUI將只對活動

  • 用戶加載的文件的一個流中使用,該文件顯示在屏幕上,向用戶示出的數學變換1,轉化的影響2和轉換3每按一次按鈕指示是/否回答後。

我想知道的是 - 是否可以設計有點硬編碼的GUI代碼,以便文件加載後,與按鈕相關的事件從連接變換(s)1變爲2到3 ?

這些轉換的功能是在另一個Java文件中實現的,我想知道如何在兩者之間進行分離/通信。或者如果我應該繼續使用一個文件來涵蓋要用GUI項目執行的數學功能。

請隨時提出您認爲會幫助您回答此問題的任何問題。

回答

3

做一些研究Model-View-Controller範式;它可能最適合你想要做的事情。

在您當前的設置中,您編寫的代碼是模型。它包含了應用程序的所有'業務邏輯'。你需要寫的是前端,視圖和控制器。控制器充當View和Model之間的中介;當你點擊一個按鈕(一個視圖元素)時,相關的按鈕處理程序(控制器)將通過調用某種方法委託給該模型。例如

public class View extends JPanel implements ActionListener { 

    JButton transform = new JButton("Transform1"); 
    Model m; 
    public View(Model m) { 
     super(); 
     this.m = m; 
     transform.setActionListener(this); 
     // lay out the GUI 
     setLayout(...); 
     add(// whatever view you need to visualize the data); 
     add(transform); 
    } 

    /** 
    Make sure all of the GUI elements are correct */ 
    public void update() { 
    State transformState = m.getTransformState(); 
    transform.setText(transformState.getNextStateDescription()); 

    // Draw the state of the file they loaded in, probably to another JPanel 
    } 

    public void actionPerformed(ActionEvent e) { 
    m.transform(); 
    } 

} 

在小例子中,可能很好地讓視圖和控制器混合在一起(視圖處理本例中的按鈕按下)。

至於兩者之間的溝通,我會建議是,你讓你的模型擴展Observable

public class Model extends Observable { 
    public void transform() { 

     // Do the transformation 

     // notify the view 
     setChanged(); 
     notifyObservers(); 
    } 
} 

,使觀落實Observer

public class View implements ActionListener, Observer { 

    public View(Model m) { 
      // snip 
      m.addObserver(this); 
    } 

    public void  update(Observable o, Object arg) { 
     // Delegate to previously defined method 
     update(); 
    } 

} 
+0

這看起來很有希望,我會研究它。 – sparkFinder 2010-08-11 00:22:22

2

我肯定會將GUI和數學分爲不同的類。至於圖形用戶界面,我建議不要因爲讓課堂設計合適而陷入太多困境,而只是儘可能以最簡單的方式進行。

+0

疑難雜症。謝謝:) – sparkFinder 2010-08-11 00:22:54