2011-11-01 64 views
2

一個Java Swing應用程序是如何組織的,以實現MVC架構?的Java Swing的MVC架構

+3

另請參閱此[答案](http://stackoverflow.com/questions/3066590/gui-problem-after-rewriting-to-mvc/3072979#3072979)。 – trashgod

+0

當谷歌再次下跌?但嚴重的是,這個問題在很多地方都被問及過很多次。 –

回答

2

我會分類我的課:

  • 對象類:代表對象
  • 功能類:提供的功能。例如,方法來讀取/可能使用一些對象類
  • 和GUI類(使用擺動),這將是什麼,用戶將看到寫文件或方法來進行計算。這些類將完成功能類提供的功能。
0

你的項目必須至少由三個實體:你model,你view和尤爾controller。你的模型代表你的數據,視圖是您的數據視圖和控制器的東西,同時創建視圖和控制器。

讓我們假設你有一個矩形,並且想要構建一個GUI,當用戶鍵入它的邊時,該GUI將顯示該矩形的區域。

您的模特必須延伸Observable班,通過這種方式您可以在您的MCV architecture中將班級Square標記爲模特。

public class Square extends Observable {ecc....} 

當您設置的一面,你必須爲改變設定模式的狀態,並通知被監聽你的模型觀察員,如:

public void setSide(double side) { 
    this.side=side; 
    setChanged(); 
    notifyObservers(); 
} 

PS:setChanged()notifyObservers()是由Observable類提供。

現在第二步,您的視圖必須實現Observer接口,因此您將此標記爲模型更改的偵聽器。落實觀察員迫使你寫update方法。

public class Square_View implements Observer { 
    JLabel area; 
    ...... 
    @Overried 
    public void update (Observable o, Object arg1) { 
     Square square=(Square)o; 
     area.setText(square.getArea()); 
    } 

那麼,只要你的方的一面改變,觸發通知和更新方法被調用。

現在controller,MVC架構的腦海:

public class MyProgram extends JFrame { 
     ... somewhere in your class 
     Square s=new Square(); 
     Square_View sv=new Square_View(); 
     s.addObserver(sv); 
} 

正如我以前說過,你同時創建模型和視圖,並註冊視圖觀察員模型。