Action Listener在MVC应用程序中不起作用



我有以下问题:我有一个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兼容。

最新更新