2012-08-07 76 views
0

我有兩個UI組件分開如下:這裏的Java Swing - 如何UI組件

class UIPanel extends JPanel{ ... } 

class MainPanel { Model m; 
    //instantiates UIPanel } 

問題是,在UIPanel類,我想補充一點,將使用模型來做出決定如何一個ActionListener處理用戶操作。不幸的是,我決定拆分這兩個類,並且我無法直接訪問模型。一個顯而易見的解決方案是簡單地將UIPanel類粘貼到MainPanel中,但我想是否有辦法保持分割。

回答

3

你可以簡單地給UIPanelModel參考:

class UIPanel { 
    UIPanel(Model m) { 
     m.addActionListener(listener); 
    } 
} 

class MainPanel { 
    ... 
    MainPanel() { 
     ... 
     UIPanel uiPanel = new UIPanel(m); // Constructor, a separate setter would be possible also 
     ... 
    } 
} 

這顯然是一個相當緊密耦合。也許MainPanel根本不需要參考Model

0

聽起來像你需要添加一個控制器類(使其更像MVC)。操縱模型的控制器會聽到視圖操縱。然後模型會發起一個事件,說它已經改變,視圖會聽。一旦收到通知,視圖就會更新。

因此,它是控制器,而不是從用戶界面監聽用戶事件,並決定如何處理它。

該模型可以觸發多個視圖。如果您希望多個控制器在同一模型上運行(每個視圖一個)或者讓控制器監聽每個視圖中的事件,則可以這樣做。我個人會有一個控制器的一個視圖。