动作侦听器在 MVC 应用程序中不起作用

Action Listener not working in a MVC application

我有以下问题:我有一个非常简单的小应用程序 UI。实施 Action Listeners 在那里工作就好了。但是,对话框 window 的 Action Listener 及其 Save 按钮只是拒绝打印测试消息。

代码比较长,为了方便,我把它放到了 hastebin 上。

http://hastebin.com/eqokilawiv.avrasm

我怀疑这可能与控制器处理添加 OptionsWindow 听众的方式有关。

我已经尝试了一些方法来查看它们是否有效:

在这一点上,我 运行 没有想法,我怀疑我可能遗漏了一些重要的东西来理解为什么它不起作用。我在实现 MVC 方面还很陌生,所以我欢迎任何反馈。

你给默认构造函数创建的Button添加actionListener,然后在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兼容。