Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java MVC应用程序_Java_Swing_User Interface_Model View Controller - Fatal编程技术网

java MVC应用程序

java MVC应用程序,java,swing,user-interface,model-view-controller,Java,Swing,User Interface,Model View Controller,我正在创建一个应用程序,我希望重用GUI,以便于重用和更改我一直使用的MVC设计模式的元素,但我有一些问题,第一个问题是如何实现实际的设计模式,因为不同的示例以不同的方式实现它。这是我在我的主要代码,这看起来好吗 mainView theView = new mainView(); mainModel theModel = new mainModel(); mainController theController = new mainController(theView,

我正在创建一个应用程序,我希望重用GUI,以便于重用和更改我一直使用的MVC设计模式的元素,但我有一些问题,第一个问题是如何实现实际的设计模式,因为不同的示例以不同的方式实现它。这是我在我的主要代码,这看起来好吗

    mainView theView = new mainView();
    mainModel theModel = new mainModel();
    mainController theController = new mainController(theView,theModel);

    theView.setVisible(true);
我遇到的第二个问题是,示例设置是控制器使用以下代码在中实现了一个视图:

控制器:

    this.theView.addCalculateListener(new CalculateListener());
视图:


这似乎很好,但我在JMenu中实现监听器时遇到了问题,因为视图的构造函数中添加了监听器,所以我的计划是在外部类中创建JMenu,我可以将所有菜单项作为全局变量(以清除代码),这将允许我以这种方式添加监听器,这是一个好的解决方案还是我的解决方案。

Swing是MVC的一种形式(albit M-VC),因此尝试将另一个MVC加入其中会引起一些问题。首先,您应该使用接口,这些接口描述了模型控制器视图之间的契约,因此,无论这些接口是如何物理实现的,您都可以更改任何一个接口,并使其仍然工作。IMHO控制器不应该访问UI组件,而是,应该通过setter/getter和通知的observer模式进行交互。这意味着控制器不关心视图是如何实现的,它只关心契约的维护。
public void addCalculateListener(ActionListener listenForCalcButton){
    calculateButton.addActionListener(listenForCalcButton);
}