Java - Интерфейс обработки событий - Разъяснение - PullRequest
1 голос
/ 21 ноября 2010

Извините, но это концепция, которую я никогда не осознавал и никогда не использовал в своем проекте. Мне нужно изучить и использовать это, абсолютно.

Итак, я прочитал много статей об интерфейсе и обработке событий, но это не помнит.

Просто начните с простого примера:

public class Main implements ActionListener{
    JButton but=new JButton("BUTTON");
    public Main() {
        but.addActionListener(this);
    }


    public void actionPerformed(ActionEvent e) {
        // DO SOMETHINGS WHEN THE BUTTON IS CLICKED
    }
}

Этот код абсолютно прост. Я реализую интерфейс ActionListener, поэтому мне нужно написать собственный код его метода (actionPerformed).

Что я не понимаю, так это:

1 - Кто реализует метод addActionListener? Это не метод в классе JButton. Кто предоставляет этот метод?

2 - Каков мост между addActionListener и методом actionPerformed? Первый должен предоставлять Event e второму ... и оба должны быть где-то реализованы ...

Извините за этот вопрос. Я пытаюсь научиться этому (читая много статей в Интернете), но я не могу понять, как это может работать!

Приветствия и спасибо всем:)

Ответы [ 4 ]

5 голосов
/ 21 ноября 2010
  1. addActionListener реализовано AbstractButton, суперклассом JButton.

  2. Объект JButton содержит ссылки на ваш ActionListener объект (т.е. экземпляр вашего Main класса).Когда пользователь вызывает событие пользовательского интерфейса, JButton создает объект ActionEvent и передает его в сохраненный объект ActionListener, т. Е. Передает событие вашему классу Main.

Если вы хотите углубиться в детали, посмотрите на исходный код AbstractButton.addActionListener и посмотрите, что он делает.

2 голосов
/ 21 ноября 2010
1 - Кто реализует метод addActionListener?Это не метод в классе JButton.Кто предоставляет этот метод?

JButton extends AbstractButton , наследуя от него addActionListener .

2 - Каким является мост между addActionListener и методом actionPerformed?Первый должен предоставлять Событие e второму ... и оба должны быть реализованы где-то ...

Упрощенно: при нажатии определенной области на экране поток обработчика событий AWT уведомляет элемент пользовательского интерфейса, расположенный вэта область экрана.

В нашем случае, если элементом пользовательского интерфейса является кнопка, логика обработки событий кнопки зацикливается на списке слушателей действий (зарегистрированных через «addActionListener») и вызывает метод «actionPerformed» вкаждый слушатель.

См. Как использовать кнопки, флажки и радио-кнопки в руководстве по Java для получения информации и примеров использования кнопок.

1 голос
/ 21 ноября 2010

На ваш первый вопрос ответили, поэтому отвечаем на второй: мост - JButton.setActionCommand(String command); и ActionEvent.getActionCommand();. Это полезно, когда слушатель действий прослушивает несколько кнопок.

1 голос
/ 21 ноября 2010

Кто реализует метод addActionListener?Это не метод в классе JButton.Кто предоставляет этот метод?

addActionListener - это метод родительского класса AbstractButton.

Каков мост между addActionListener и методом actionPerformed?Первый должен предоставлять Событие e второму ... и оба должны быть где-то реализованы ...

Класс, который реализует метод ActionListener, реализует actionPerformed.Это тот, кто хочет получать уведомления и отвечать на события.

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