我正在尝试构建一个基于 MVC 的 Swing 用户界面,并且有几个关于该主题的问题。问我问题的最好方法是借助一个简单的例子。
假设我们有一个带有一个 JButton 和 3 个 JTextField 的 JDialog。当按下该按钮时,我希望此 JDialog 关闭并打开另一个需要来自 3 个 JTextField 的数据的按钮。
这样做的简单方法(只需要代码片段,不需要太烦你)是:
myButton.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent evt){
firstFrame.setVisible(false);
secondFrame.setData(jTextField1.getText(),jTextField2.getText(),jTextField3.getText());//just sending the data to the new window, would be this or something similar
secondFrame.setVisible(true);
}});
或类似的东西。
第一个问题:如果我不使用匿名内部类,但决定为我的 Listener 使用单独的类,我将如何将数据从 3 个 JTextFields 传递到我的 mouseListener 类?除了在 Listener 类中保留视图的引用之外,还有其他选择吗?
继续,给定 MVC 模式:
第二个问题:我想监听器(根据 MVC 的控制器)在不涉及模型的情况下调用另一个窗口是有意义的,我猜这是工作。但是需要从一个窗口传递到下一个窗口的数据(来自 3JTextFields 的数据)不应该通过模型吗?就像让第一个窗口将数据保存在模型中,然后当第二个窗口需要它们时从模型中请求它们。
第三个问题:我正在考虑使用 Observer/Observable 模式。在此示例中如何使用它来打开最后一个窗口?我的意思是,因为(我认为)Controller 是打开第二个窗口的类,这是否意味着 Listener 必须被 Observed 并且第二个窗口必须是 Observer 以便 Listener 会说
notifyObservers("openSecondWindow");
然后第二个窗口会看到它并自行打开?
最后:我听说 PropertyChangeListener 也可以工作,而且有时它优于观察者/可观察模式。你对此有何看法,尤其是关于我的例子。
我很困惑..
感谢您的时间。