Что делает addActionListener? - PullRequest
       8

Что делает addActionListener?

9 голосов
/ 30 января 2010

У меня есть следующий код:

JButton button = new JButton("Clear");
button.addActionListener(this);

Насколько я понимаю, создаю кнопку, на которой написано "Очистить". Затем я должен связать действие с этой кнопкой (что произойдет, если кнопка нажата), и это делается с помощью addActionListener. Это правильно?

Но я не понимаю, где указано действие. Нажатие кнопки должно очистить текстовую область и, насколько я понимаю, должен быть где-то код, который очищает текстовую область. Но в данном примере в аргументах addActionListener().

есть только «это».

Как программа знает, что она должна очистить текстовую область при нажатии кнопки?

Если необходимо, полный код выдается здесь .

Ответы [ 5 ]

16 голосов
/ 30 января 2010

ActionListener - это механизм обратного вызова. Всякий раз, когда элемент управления добавляется к ActionEvent, вызывается метод public void actionPerformed(ActionEvent e).

Что я не понимаю, так это то, где вызывается actionPerformed. Я вижу, что он определен внутри класса, но нет места, где этот метод вызывается.

Это вызывается внутренними механизмами компонента пользовательского интерфейса. Концептуально, вы можете думать, что код выглядит примерно так:

public class Button {
  private final List<ActionListener> listeners = new ArrayList<ActionListener>();

  public void addActionListener(ActionListener l) {
    listeners.add(l);
  }

  public void click() {
    ActionEvent event = new ActionEvent(this, 0, "click");
    for (ActionListener l : listeners) {
      l.actionPerformed(event);
    }
  }
}
2 голосов
/ 30 января 2010

Каждый JButton, имеет EventListenerList. Вызов addActionListener(this) добавляет вашу ActionListener функцию обратного вызова с именем actionPerformed() в список. Вы можете увидеть схему кода, который вызывает ваш метод здесь . Фактический метод fireActionPerformed() находится в AbstractButton. JButton - это JComponent, который можно увидеть в списке среди различных классов, использующих механизм списка прослушивателей событий.

1 голос
/ 30 января 2010

Вы звоните button.addActionListener( this ), потому что this реализует интерфейс ActionListener. При нажатии кнопки вызывается метод actionPerformed(ActionEvent e) (определенный интерфейсом и реализованный вашим классом).

0 голосов
/ 09 января 2017

По сути, механизм обработки событий пользовательского интерфейса - это очереди событий JVM, и каждый тип события имеет своих подписчиков. При возникновении события, например при нажатии кнопки, JVM соответственно делегирует обработку подписчику события. И этот класс подписчика должен определить метод или обработчик события для обработки события.

В вашем случае при звонке button.addActionListener (это); код фактически подписывает этот экземпляр KeyEventDemo на событие типа click. Затем, когда нажата кнопка, будет запущен метод actionPerformed KeyEventDemo.

0 голосов
/ 25 ноября 2012

Генератору событий сообщается об объекте, который может обрабатывать его события. Генераторы событий имеют метод;- addActionListener ( ссылка на объект класса Handler ) Например,

JButton b1=new JButton("My Button");
 b1.addActionListener(this); // Please note listener and generator are same class

Поскольку обработчик событий находится в том же объекте, который содержит кнопку, поэтому мы должны использовать this для передачиссылка.

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