2011-05-11 77 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框架做同样的事情