MVCアーキテクチャパターンを使用して簡単なJava Swingアプリケーションを構築しようとしています。私が行ったことは、自分のビューにユーザーインターフェイスコンポーネントを(プライベートとして)作成し、コンポーネントを返すパブリックメソッドを持つことです。これらのメソッドはコントローラによって呼び出され、イベント/アクションリスナのメソッドを記述することができます。以下のサンプル例です。Java Swing FocusListenerのMVC実装
ビュー:
private JButton btnAdd;
public JButton getBtnAdd(){
return btnAdd;
}
コントロール:
myGuiFrame gui = new myGuiFrame();
//on add button clicked
gui.getBtnAdd().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//calls to model
}
});
は、この実装は正しいですか?
もしそうなら、私はFocusListenersに問題があります。私のビューでFocusListenerを作成すると、focusLostメソッドとfocusGainedメソッドがビュー内に作成されます。
private FocusListener l;
someComponent.addFocusListener(l);
l = new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
}
};
すべてのイベントハンドラを私のコントローラに入れたいです。私の質問は...私は/私のコントローラからfocusLostとfocusGainedメソッドを呼び出す/宣言することができる方法はありますか?私は私のコントローラでそれを定義することができるように、パブリックとしてのFocusListenerを定義しようとした:
ビュー:
public FocusListener l;
public someComponentType someComponent;
コントローラ:
gui.l = new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
gui.someComponent.addFocusListener(gui.l);
}
}。
ただし、これは機能しません。
コントローラからFocusEventsを処理することはできますか?
編集:
おっと、私の悪い。ロビンが何をしているのか全く分かりませんでした。 FocusListenerを明示的にどこかに定義させすぎてしまった。シンプル:
gui.getTextFieldEmployeeCode().addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
System.out.println("YES!!!");
}
});
コントローラでは、Iかかわらず、非常にどのように素敵な牛逝ってしまったそれについてのように、私はそれを行うために計画的にうまく動作します。好奇心の念から、スイングアプリケーションにMVCを実装する標準的な、あるいは広く受け入れられている方法がありますか?
[sscce](http://www.sscce.org)を追加してください。 – user1329572
AFAIK、 'button.addActionListener(...);'は、ControllerではなくViewの一部です。この関数の引数として渡したものは、 'button.addActionListener(new ButtonController())のようなコントローラクラスです。 ; '、' FocusListener'を実装する 'ButtonController'クラスの中に、これら2つのメソッド' focusGained(...)/ focusLost(...)があります) ' –
あなたの' ActionListener'と 'FocusListener'の違いはわかりません。使用可能なゲッターを使用して、コントローラーに 'ActionListener'を作成して追加します。 FocusListenerに同じアプローチを使用してみませんか? – Robin