MVC に基づいて Swing ユーザー インターフェイスを構築しようとしていますが、このトピックについていくつか質問があります。私の質問をする最良の方法は、簡単な例の助けを借りることです.
1 つの JButton と 3 つの JTextField を持つ JDialog があるとします。そのボタンが押されたら、この JDialog を閉じて、3 つの JTextFields からのデータを必要とする別の JDialog を開きます。
これを行う簡単な方法は次のとおりです (コードのスニペットだけを使用します。あまり気にする必要はありません)。
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パターンを考えると、続けます:
2 番目の質問: リスナー (MVC によるコントローラー) が、モデルを関与させずに別のウィンドウを呼び出すのは理にかなっていると思います。それが仕事だと思います。しかし、あるウィンドウから次のウィンドウに渡す必要があるデータ (3JTextFields からのデータ) は、モデルを通過するべきではありませんか? 最初のウィンドウでそのデータをモデルに保存し、2 番目のウィンドウで必要になったときにモデルから要求するようにします。
3 番目の質問: Observer/Observable パターンの使用を検討していました。この例では、最後のウィンドウを開くためにどのように使用されますか? つまり、コントローラーは2番目のウィンドウを開くクラスであるため、リスナーが監視される必要があり、2番目のウィンドウがオブザーバーでなければならないことを意味します。
notifyObservers("openSecondWindow");
次に、2 番目のウィンドウがそれを確認して開きますか?
最後に: PropertyChangeListener も同様に機能し、Observer/Observable パターンよりも優先される場合があると聞きました。特に私の例に関して、これについてどう思いますか。
私は混乱しています..
お時間をいただきありがとうございます。