我有以下问题:我有一个带有非常简单的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兼容。

07-27 22:41