动作侦听器在 MVC 应用程序中不起作用
Action Listener not working in a MVC application
我有以下问题:我有一个非常简单的小应用程序 UI。实施 Action Listeners
在那里工作就好了。但是,对话框 window 的 Action Listener
及其 Save
按钮只是拒绝打印测试消息。
代码比较长,为了方便,我把它放到了 hastebin 上。
http://hastebin.com/eqokilawiv.avrasm
我怀疑这可能与控制器处理添加 OptionsWindow
听众的方式有关。
我已经尝试了一些方法来查看它们是否有效:
OptionsWindow
有单独的控制器,我在其中实施 Action Listeners
与我的 MainWindow
完全相同。很遗憾,它没有解决问题。
从单个 ButtonListener
class.
添加所有 Action Listeners
MainController
添加来自两个不同 Action Listener
class 的所有 Action Listeners
。
在这一点上,我 运行 没有想法,我怀疑我可能遗漏了一些重要的东西来理解为什么它不起作用。我在实现 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兼容。
我有以下问题:我有一个非常简单的小应用程序 UI。实施 Action Listeners
在那里工作就好了。但是,对话框 window 的 Action Listener
及其 Save
按钮只是拒绝打印测试消息。
代码比较长,为了方便,我把它放到了 hastebin 上。
http://hastebin.com/eqokilawiv.avrasm
我怀疑这可能与控制器处理添加 OptionsWindow
听众的方式有关。
我已经尝试了一些方法来查看它们是否有效:
OptionsWindow
有单独的控制器,我在其中实施Action Listeners
与我的MainWindow
完全相同。很遗憾,它没有解决问题。从单个
ButtonListener
class. 添加所有 MainController
添加来自两个不同Action Listener
class 的所有Action Listeners
。
Action Listeners
在这一点上,我 运行 没有想法,我怀疑我可能遗漏了一些重要的东西来理解为什么它不起作用。我在实现 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兼容。