0

私は単純なアプリを構築しており、コントローラーがビューにイベントハンドラーを追加する単純なMVCパターンでそれを実装しています。UIにハンドラーをアタッチするコントローラーコードのサンプルを次に示します。

基本的に、コードはUIの保存ボタンがクリックされたときにイベントハンドラーを追加します。UIには、名前とID番号のエントリが含まれています。actionPerformed私がやりたかったのは、名前とID番号を関数に渡すことです。

ui.onAddStudent(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.print("test");
    }
});

また、UI(別ファイル)の受信機能は以下のとおりです。

public void onAddStudent(ActionListener handler){
    //something missing here
    addStudent.addActionListener(handler);
}

私はJavaが得意ではないので、Javaにはあまり興味がありません。私は実際にJavaScriptを実行しています。現在、同様のハンドラーJavaScriptでは、call()orapply()メソッドを使用してハンドラーを呼び出し、追加のパラメーターを渡すことができます。上記のコードがJSにある場合、次のようになります。

//in the controller
ui.onAddStudent(function(event,id,name){
    //I can use id and name
});

//in the UI
ui.onAddStudent = function(handler){
    //store into a cache
    //add handler to the button
}

//when student is added (button clicked)
handler.call(this,event,id,name);

Javaで同じことをするにはどうすればよいですか?

4

2 に答える 2

3

2つの選択肢があります。

  • そのままにして、コントローラーにGUIからIDと名前を取得させます(これが最も簡単で単純なソリューションであるIMHOです)
  • この情報を含む独自のイベントおよびリスナータイプを使用します。例えば:

    public class StudentAddedEvent {
        private long ID;
        private String name;
        ...
    }
    
    public interface StudentAddedListener {
        void studentAdded(StudentAddedEvent event);
    }
    

UIはボタンにActionListenerを登録し、このアクションリスナーは次のことを行います。

@Override
public void actionPerformed(ActionEvent e) {
    long id = getIdInGui();
    String name = getNameInGui();
    StudentAddedEvent event = new StudentAddedEvent(id, name);
    for (StudentAddedListener listener : studentAddedListeners) {
        listener.studentAdded(event);
    }
}
于 2012-12-16T14:04:14.627 に答える
1

独自のものを定義してAction、それらをボタン(コンストラクター引数またはsetAction)およびその他のコンポーネントに設定することもできます。

そのためにAbstractActionを拡張します。

于 2012-12-16T14:08:04.320 に答える