У меня есть следующий код:
JButton button = new JButton("Clear");
button.addActionListener(this);
Насколько я понимаю, что создаю кнопку, на которой это записано "Ясный". Затем я должен связать действие с этой кнопкой (что произойдет, если кнопка будет нажата), и это сделано addActionListener
. Действительно ли это правильно?
Но то, что я не понимаю, - то, где действие указано. Нажатие кнопки должно область открытого текста и, насколько я понимаю, должен быть где-нибудь код, которые очищают текстовую область. Но в данном примере существует только "это" в аргументах addActionListener()
.
Как программа знает, что должна очистить текстовую область при нажатии кнопки?
Если это необходимо, полный код дан здесь.
ActionListener
- это механизм обратного вызова. Всякий раз, когда будет добавлен контроль, чтобы пожарить ActionEvent
, будет включен
Public Faceperformed (ActionEvent E)
.
То, что я не понимаю, это то, где вызывается ActionPerformed. Я вижу, что он определяется в классе, но нет места, где называется этот метод.
Это называется внутренними механизмами компонента UI. Концептуально, вы можете подумать о коде, который выглядит так, как это так:
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);
}
}
}
Каждый JButton
, имеет EventListenerLList
. Вызов AddactionListener (это)
Добавляет ваш ActionListener
, функция обратного вызова с именем ActionPerformed ()
, в список. Вы можете увидеть план кода, который вызывает ваш метод здесь . Фактический метод обхода
()
находится в Абсонтетон
. A JBUTTON
- это jComponent
, который вы можете , см. Перечисленные среди различных классов, которые используют механизм списка прослушивателя событий.
Вызывается button.addActionListener (this)
, поскольку этот
реализует интерфейс ActionListener
. При нажатии кнопки вызывается метод actionPerformed (ActionEvent e)
(определяется интерфейсом и реализуется классом).