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
Odpowiedz
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;
}
}
}
Myślę, że ten jest ogólnie bardziej elegancki. Dzięki! – CodyBugstein
Po chwili jednak, czy to wymaga, aby ActionListener był w tej samej klasie? – CodyBugstein
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
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) {
}
}
możliwe duplikat [? Java - Handle wiele zdarzeń z jednej funkcji] (http://stackoverflow.com/questions/501533/java-handle-multiple- events-with-one-function) –