2017-01-23 77 views
1

我想在我的程序來實現MVC增加聽衆JPanels,這是目前我的控制器類:MVC,幷包含在其他其它的組件

public class Controller { 

    private DatabaseModel model; 
    private View view; 

    public Controller(View view, DatabaseModel model){ 
     this.model = model; 
     this.view = view; 

     this.view.getMainPanel().getCandidateForm(). 
        addSubmitListener(new CandidateListener()); 
    } 

    class CandidateListener implements ActionListener{ 
     public void actionPerformed(ActionEvent e){ 
      System.out.println("ACTION"); 
     } 
    } 
} 

,因爲我認爲包括一些私人子JPanels - MainFrame和CandidateForm - 後者是按鈕的位置,在第10行,我將候選窗體面板傳遞迴控制器,然後將其稱爲'addSubmitListener()'方法,該方法將自定義偵聽器添加到按鈕。

這看起來像是添加偵聽器的正確方法嗎?我應該如何在Controller中定義CandidateListener?或者可能在子JPanel中創建一個匿名類?

有關MVC和聽衆的最佳實踐的任何其他建議也將不勝感激!

+1

[在Java開發中使用Swing正確實現MVC模式]可能的副本(http://stackoverflow.com/questions/25502552/correctly-implementing-the-mvc-pattern-in-gui-development-using -swing-in-java) –

回答

1

如注意到here,「並非每個交互都需要通過應用程序的控制器。」你的方法不是錯誤,但它可能縮小比例。考慮使用Action來封裝功能,如建議here。在數據庫上下文中,此簡單example創建Action,它將查詢結果選項卡添加到JTabbedPane。這個更詳細的example使用SwingWorker在後臺查詢數據庫;相應的Action可能實例化該工作者並​​它。

+0

哇,謝謝。那個數據庫的例子特別好。 我並不擅長處理一般的事件,我很新,但這對我有很大的幫助。 至於通過控制器傳遞的每個交互 - 是爲什麼在彩色猜測器示例中,您將模型傳遞給視圖? 對於遲到的回覆感到抱歉,整件事情都被放在了後面,我忘記了我的問題。但很感謝! – NickW

+0

@nickW:正如本[綱要](http://stackoverflow.com/a/2687871/230513)中所建議的那樣,該視圖可能會引用該模型。 – trashgod

+0

不錯,我一定會再看看。到目前爲止,我很享受閱讀你的代碼示例。 雖然 - 我假設虛線是*不*參考/鏈接(他們是間接的溝通,對吧?)1快速問題,但對於該圖表 – NickW