Обработчики событий Java - PullRequest
0 голосов
/ 19 февраля 2009

Я пишу небольшое Java-приложение (в Windows, следовательно, к моему имени добавляется _on_vista).

У меня есть 3 кнопки, каждая из которых будет реагировать на событие нажатия, но делать разные вещи.

Является ли следующий код приемлемым или есть более чистый способ, о котором я не знаю? С одной стороны это работает, с другой - что-то не так ...

Спасибо

cool_button_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        coolfunction1();
    }
});

cool_button_2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        coolfunction2();
    }
});

// etc ...

Вызываемые функции будут порождать потоки по мере необходимости, и т. Д. И т. Д.

ОБНОВЛЕНИЕ - Оба были хорошими (почти одинаковыми) ответами. Я принял тот, у кого ниже репутация, чтобы поделиться богатством. Еще раз спасибо, ребята.

Ответы [ 5 ]

3 голосов
/ 19 февраля 2009

Да, это правильный способ сделать это. Это немного неуклюже (нужно написать пять длинных строк кода, чтобы вызвать метод), но это Java: (

1 голос
/ 19 февраля 2009

Это один из правильных способов сделать это.

Вы используете анонимных слушателей, но есть альтернатива

красиво объяснил http://java.sun.com/docs/books/tutorial/uiswing/events/intro.html

, где вы пишете класс, реализующий ActionListener и позволяющий ему обрабатывать логику

1 голос
/ 19 февраля 2009

Это не так уж плохо. Я предпочитаю использовать Действия и создавать из них Кнопки J :

Action fooAction = new AbstractAction() { ... };
JButton fooButton = new JButton(fooAction);
0 голосов
/ 19 февраля 2009

Я склонен делать что-то вроде этого:

public class ButtonPanel implements ActionListener {
    JButton button1, button2, button3;
    public ButtonPanel() {
        button1 = new JButton(this);
        button2 = new JButton(this);
        button3 = new JButton(this):
        ...
    }

    public void ActionPerformed(ActionEvent e) {
        if( e.getSource() == button1 ) action1();
        else if( e.getSouce() == button2  ) action2();
        else if( e.getSource() == button3 ) action3();
    }
}
0 голосов
/ 19 февраля 2009

Я бы сказал, что код в порядке, как и код Java. Это хороший пример часто критикуемого многословия Java - в данном случае из-за отсутствия замыканий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...