我有以下问题:我有一个带有非常简单的UI的小型应用程序。实施Action Listeners
的工作就很好了。但是,“对话”窗口的Action Listener
及其Save
按钮只是拒绝打印测试消息。
该代码相当长,因此为了方便起见,我将其放在hastebin上。
http://hastebin.com/eqokilawiv.avrasm
我怀疑这可能与控制器处理添加OptionsWindow
侦听器的方式有关。
我尝试了几件事,看看它们是否有效:OptionsWindow
具有单独的控制器,其中我实现Action Listeners
的控制器与MainWindow
完全相同。遗憾的是,它无法解决问题。
使MainController
从单个Action Listeners
类添加所有ButtonListener
。
使MainController
添加来自两个不同Action Listeners
类的所有Action Listener
。
在这一点上,我没有想法,我怀疑我可能缺少一些重要的信息,以了解为什么它不起作用。在实现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兼容。