2011-05-11 146 views
6

我正在使用本教程來構建使用MVC體系結構的應用程序:http://www.oracle.com/technetwork/articles/javase/index-142890.html。但我不知道應該如何或在哪裏放置代碼來構建JMenuBar的actionListener,並在其中添加JMenuBar的actionListener。如何在Java中將JMenuBar集成到MVC體系結構中?

此外,本書在面向對象的設計&模式由岩礁HORSTMANN說:「控制器可從窗口系統處理鼠標和鍵盤事件,或者它可能包含用戶界面元素,例如按鈕和菜單。」我應該遵循這個建議,如果是的話,我應該如何執行它?如何將它添加到我的Main類中的JFrame?

+0

不是一個答案,但我寧願建議你看一下基於PM的架構,而不是MVC。 Karsten Lentzsch對此有非常好的介紹(抱歉,我現在沒有鏈接),還有開源的JGoodies綁定庫來幫助實現它。 – jfpoilpret 2011-05-11 16:05:11

+0

坦克你@ jfpoilpret,我不知道這個架構,我會去看看它。 – JPB 2011-05-11 16:55:36

回答

3

如建議在How to Use ActionsAction是封裝了一個非常方便的方式。而且,「Action」可用於從組件中分離功能和狀態。「

附錄:在這個非常簡單的example,該模型是代表在文件系統中的目錄File,視圖是一個JLabel偵聽的actionPerformed()Action提供的封裝確保每個菜單項和工具欄按鈕產生相同的結果。該方法是Swing的separable model architecture的象徵。

+0

+1對於java.swing.Action – mKorbel 2011-05-11 21:40:49

+0

@mKorbel:謝謝!這種便利性很吸引人,但我仍然需要解決體系結構方面的問題。 – trashgod 2011-05-11 21:47:38

0

我一直以下列方式創建MenuBars。

class MyMenuBar extends JMenuBar { 
    add(new FileItem()) 
} 

class FileItem extends MenuItem { 
    addMenuItem(new ExitAction()) 
} 

class ExitAction extends AbstractAction { 
    //define the action, tooltip and name of here 
} 

然後在主框架您剛纔的菜單欄添加到它 的JFrame myframe;

myFrame.setMenuBar(new MyMenuBar()) 

這種語法的一些可能是錯誤的,有一段時間沒有寫一個菜單欄。您可以通過其工廠類返回你的行動進一步擴展它,使他們能夠被重用或使用一些DI框架做同樣的事情