2013-01-21 12 views
5

Ho due JButtons chiamati "Left" e "Right". Il pulsante "Sinistra" sposta un oggetto rettangolo verso sinistra e il pulsante "Destra" lo sposta verso destra. Ho uno ActionListener nella classe che funge da ascoltatore quando si fa clic su uno dei due pulsanti. Tuttavia, desidero che vengano eseguite azioni diverse quando si fa clic su ciascuna di esse. Come faccio a distinguere, nello ActionListener, tra il quale è stato fatto clic?Un listener di azioni, due JButtons

+2

possibile duplicato di [? Java - gestire più eventi con una funzione] (http://stackoverflow.com/questions/501533/java-handle-multiple- events-with-one-function) –

risposta

8

Set actionCommand a ciascuno del pulsante.

// Imposta i comandi di azione su entrambi i pulsanti.

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

Penso che questo sia più elegante in generale. Grazie! – CodyBugstein

+0

Solo un secondo, richiede che ActionListener si trovi nella stessa classe? – CodyBugstein

+1

Definire una classe ActionListener. Dichiarare un oggetto della classe action nella classe UI. Imposta ogni pulsante actionListener usando il metodo addActionListener e aggiungi questo riferimento alla classe action come param e infine imposta il comando action a ciascuno di essi. – Amarnath

6

Abbastanza facile con il metodo getSource() disposizione ActionEvent:

JButton leftButton, rightButton; 

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

    if (src == leftButton) { 

    } 
    else if (src == rightButton) { 

    } 
} 
Problemi correlati