2013-01-21 15 views
5

Mam dwa JButtons o nazwie "Lewy" i "Prawy". Przycisk "W lewo" przesuwa obiekt prostokątny w lewo, a przycisk "W prawo" przesuwa go w prawo. Mam jeden ActionListener w klasie, która działa jak detektor, gdy kliknięto przycisk. Jednak chcę, aby różne akcje miały miejsce po ich kliknięciu. Jak mogę odróżnić, w kodzie ActionListener, który został kliknięty?Jeden słuchacz działania, dwa JButtony

+2

możliwe duplikat [? Java - Handle wiele zdarzeń z jednej funkcji] (http://stackoverflow.com/questions/501533/java-handle-multiple- events-with-one-function) –

Odpowiedz

8

Set actionCommand do każdego przycisku.

// Ustawić polecenia akcji dla obu przycisków.

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

Myślę, że ten jest ogólnie bardziej elegancki. Dzięki! – CodyBugstein

+0

Po chwili jednak, czy to wymaga, aby ActionListener był w tej samej klasie? – CodyBugstein

+1

Zdefiniuj jedną klasę ActionListener. Zadeklaruj obiekt klasy działania w klasie UI. Ustaw każdy przycisk actionListener za pomocą metody addActionListener i dodaj to odwołanie do klasy działania jako parametr i ostatecznie ustaw komendę działania dla każdego z nich. – Amarnath

6

Dość łatwo metodą getSource() dostępną ActionEvent:

JButton leftButton, rightButton; 

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

    if (src == leftButton) { 

    } 
    else if (src == rightButton) { 

    } 
} 
Powiązane problemy