我有以下问题:我有一个UI非常简单的小应用程序。在那里执行Action Listeners
工作很好。但是,对话框窗口的Action Listener
及其Save
按钮只是拒绝打印测试消息。
代码相当长,所以为了方便起见,我把它放在了hastbin上。
http://hastebin.com/eqokilawiv.avrasm
我怀疑这可能与控制器如何处理添加OptionsWindow
侦听器有关。
我尝试了几种方法来看看它们是否有效:
-
为
OptionsWindow
提供单独的控制器,其中我实现的Action Listeners
与我的MainWindow
完全相同。遗憾的是,它并没有解决这个问题。 -
使
MainController
将来自单个ButtonListener
类的所有Action Listeners
相加。 -
使
MainController
将来自两个不同的Action Listener
类的所有Action Listeners
相加。
在这一点上,我没有什么想法了,我怀疑我可能错过了一些关键的东西,无法理解为什么它不起作用。当谈到实现MVC时,我还是个新手,所以我欢迎任何反馈。
您将actionListener添加到默认构造函数创建的Button中,然后在actionListener:中
optionsWindow = new OptionsWindow(mainWindow.getMainFrame());
您创建了新的OptionsWindow,但没有连接到SaveButton的actionListener。因此,它足以添加:
if (ev.getSource() == mainWindow.optionsButton) {
System.out.println("Options pressed");
optionsWindow = new OptionsWindow(mainWindow.getMainFrame());
optionsWindow.addOptionsButtonListener(new OptionsButtonListener()); //<-- once again add actionListener
}
它与您的代码配合良好。
另一个解决方案是删除默认构造函数,并使用一个方法代替mainFrame参数:
public void getVisibleFrame(){
optionsDialog.setVisible(true);
}
和在actionListener:
if (ev.getSource() == mainWindow.optionsButton) {
optionsWindow.getVisibleFrame();
}
但是我不知道它是否与MVC兼容。