3

たとえば、フレームに 10 個のボタンがあります。それらすべてに一意のアクション リスナーを使用できますか? それぞれにリスナーを定義するのではなく、すべてに1つのリスナーを定義することを意味します。例を挙げてください。ありがとう

4

5 に答える 5

4

あなたはそれを行うことができますが、すべてのボタンが同じことをしなければならないという特殊な状況がない限り、それらすべてを支配する「1つのコントローラー」に送られるすべての呼び出しを逆多重化する必要があります。

その逆多重化にはおそらくスイッチ (またはさらに悪いことに、一連の if / then ステートメント) が含まれ、そのスイッチはメンテナンスの頭痛の種になります。これがどのように悪い可能性があるかの例をここで参照してください。

于 2013-08-06T20:55:49.330 に答える
2
// Create your buttons.
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
// ...

// Create the action listener to add to your buttons.
ActionListener actionListener = new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    // Execute whatever should happen on button click.
  }
}

// Add the action listener to your buttons.
button1.addActionListener(actionListener);      
button2.addActionListener(actionListener);
button3.addActionListener(actionListener);
// ...
于 2013-08-06T20:54:57.747 に答える
2

はい、もちろんできます

class myActionListener implements ActionListener {
    ...
    public void actionPerformed(ActionEvent e) {
        // your handle button click code
    }
}

そしてJFrameで

myActionListener listener = new myActionListener ();
button1.addActionListener(listener );
button2.addActionListener(listener );
button3.addActionListener(listener );

等々

于 2013-08-06T20:55:52.050 に答える
1

これを行うことができます。actionPerformedメソッドでアクション コマンドを取得し、各ボタンに対してアクション コマンドを設定します。

ActionListener al_button1 = new ActionListner(){
        @Override
        public void actionPerformed(ActionEvent e){
            String action = e.getActionCommand();
            if (action.equals("button1Command")){
                    //do button 1 command
            } else if (action.equals("button2Command")){
                    //do button 2 command
            }
            //...

        }
 }
 //add listener to the buttons
 button1.addActionListener(al_buttons)
 button2.addActionListener(al_buttons)
 // set actioncommand for buttons
 button1.setActionCommand("button1Command");
 button2.setActionCommand("button2Command");
于 2013-08-06T20:55:16.167 に答える