2013-01-21 10 views
5

私は2つのJButtons "Left"と "Right"と呼ばれています。 "Left"ボタンは矩形オブジェクトを左に移動し、 "Right"ボタンは右に移動します。 いずれかのボタンがクリックされたときのリスナーとして機能するクラスには、ActionListenerが1つあります。 しかし、私は、それぞれがクリックされたときに異なるアクションが起こるようにしたい。 ActionListenerのどの部分をクリックしたかを区別するにはどうすればよいですか?1つのアクションリスナー、2つのJButton

+2

可能重複[?ジャワ - 一つの機能を有する複数のイベントを処理](http://stackoverflow.com/questions/501533/java-handle-multiple- events-with-one-function) –

答えて

8

設定actionCommand

//両方のボタンにアクションコマンドを設定します。

btnOne.setActionCommand("1"); 
btnTwo.setActionCommand("2"); 

public void actionPerformed(ActionEvent e) { 
int action = Integer.parseInt(e.getActionCommand()); 

switch(action) { 
case 1: 
     //doSomething 
     break; 
case 2: 
     // doSomething; 
     break; 
} 
} 

UPDATE:

public class JBtnExample { 
public static void main(String[] args) { 
    JButton btnOne = new JButton(); 
    JButton btnTwo = new JButton(); 

    ActionClass actionEvent = new ActionClass(); 

    btnOne.addActionListener(actionEvent); 
      btnTwo.addActionListener(actionEvent); 

    btnOne.setActionCommand("1"); 
    btnTwo.setActionCommand("2"); 
} 
} 

class ActionClass implements ActionListener { 

@Override 
public void actionPerformed(ActionEvent e) { 
    int action = Integer.parseInt(e.getActionCommand()); 
    switch (action) { 
    case 1: 
     // DOSomething 
     break; 
    case 2: 
     // DOSomething 
     break;       
    default: 
     break; 
    } 
} 
} 
+0

私はこれが一般的にはよりエレガントだと思います。ありがとう! – CodyBugstein

+0

しかし、これはActionListenerが同じクラスにあることを必要としますか? – CodyBugstein

+1

1つのActionListenerクラスを定義します。 UIクラスでアクションクラスのオブジェクトを宣言します。 addActionListenerメソッドを使用して各ボタンのactionListenerを設定し、このアクションクラス参照をparamとして追加し、最後にactionコマンドをそれぞれに設定します。 – Amarnath

6

ActionEventに利用できるgetSource()方法と非常に簡単:ボタンのそれぞれに

JButton leftButton, rightButton; 

public void actionPerformed(ActionEvent e) { 
    Object src = e.getSource(); 

    if (src == leftButton) { 

    } 
    else if (src == rightButton) { 

    } 
} 
関連する問題