Главная » Java » Слушатель по имени ActionListener

0

Давайте вернемся к нашему калькулятору. Если вы  сделали задания к предыдущей главе,  визуальная  часть  программы готова.  Теперь  мы создадим  еще  один  класс-­?слушатель,  который  будет  что-­?то делать, когда пользователь будет нажимать на одну из  кнопок. Вообще-­?то,  мы могли   бы добавить текст программы, обрабатывающий события нажатия на кнопку, сразу в класс Calculator.java, но лучше не смешивать в одном классе визуальную и обрабатывающую части.

Назовем  второй  класс  CalculatorEngine,  и  скажем,  что  он  должен реализовать  интерфейс  java.awt.ActionListener  в  котором объявлен только  один  метод  -­? actionPerformed(ActionEvent). JVM  вызывает этот метод в классе, который реализует этот интерфейс каждый раз, когда кто-­?то нажимает на кнопку.

Посмотрим на этот простой класс:

import java.awt.event.ActionListener;

public class CalculatorEngine implements ActionListener {

}

Если вы  попытаетесь его  скомпилировать (или  просто сохранить его в Eclipse),  то  возникнет  сообщение  об  ошибке,  что,  мол, класс  должен реализовать метод  actionPerformed(ActionEvent e).  Давайте исправим эту ошибку:

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

public class CalculatorEngine implements ActionListener {

public void actionPerformed(ActionEvent e){

// Если этот метод можно оставить пустым, ничего не

// произойдет, когда JVM вызовет его

}

}

Следующая  версия  этого  класса  будет  открывать  окно сообщения (a message  box)   из  метода actionPerformed(). С помощью класса  JOptionPane  и  его  метода   showConfirmDialog()  можно  показывать  пользователю   любые   сообщения.   Например, класс  CalculatorEngine может выдать следующее:

 

Есть   разные   версии   метода   showConfirmDialog(),   мы  будем использовать  версию с четырьмя параметрами. В тексте программы ниже  null означает, что окно сообщения не имеет родительского окна, второй  аргумент  – это заголовок окна сообщения, потом идет само сообщение,  а четвертый аргумент позволяет выбрать, какие кнопки будут  отображаться  в  окне  сообщения  (PLAIN_MESSAGE  в следующем примере  означает, что будет отображаться  только одна кнопка -­? “OK”).import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JOptionPane;

public class CalculatorEngine implements ActionListener {

public void actionPerformed(ActionEvent e){ JOptionPane.showConfirmDialog(null,

"Something happened…", "Just a test", JOptionPane.PLAIN_MESSAGE);

}

}

Теперь я  покажу, как  скомпилировать и запустить следующую версию нашего  калькулятора, которая показывает окно сообщения  “Something happened”.Регистрация компонентов с ActionListenerКто   и   когда   будет   вызывать   код,  написанный   в   методе actionPerformed()?    Сама JVM вызовет этот метод, если   вы зарегистрируете  класс CalculatorEngine в кнопках калькулятора (или свяжете  их с классом)! Просто добавьте эти две строки в конец конструктора  класса  Calculator  ,  чтобы зарегистрировать  наш слушатель для  кнопки “Ноль”:

CalculatorEngine calcEngine = new CalculatorEngine();

button0.addActionListener(calcEngine);

Теперь  каждый  раз,  когда  пользователь  нажмет  кнопку  button0, JVM вызовет  метод   actionPerformed()   у   объекта   CalculatorEngine. Скомпилируйте  и  запустите  класс  Calculator  и нажмите  на  кнопку  “Ноль”  –  и  на  экране  появится  окно  сообщения “Something happened”! Другие   кнопки  пока  не  реагируют, потому   что  в  них  не  зарегистрирован  наш  слушатель.   Добавьте  такие  же  строки, чтобы  оживить и другие кнопки:

button1.addActionListener(calcEngine); button2.addActionListener(calcEngine); button3.addActionListener(calcEngine); button4.addActionListener(calcEngine);

и т д. Из-­?за кого событие-­?то? Следующий шаг  –  сделать нашего  слушателя немного умнее –  он будет показывать различные сообщения, в зависимости от того, какая кнопка была нажата.  Когда произойдет событие,  JVM вызовет метод вашего класса-­?слушателя  actionPerformed(ActionEvent),  и передаст ему необходимую  информацию  о  событии  в  аргументе  ActionEvent. Вы можете  получить эту информацию, вызывая соответствующие методы этого объекта-­?аргумента.

Источник: Java  Programming for Kids, Parents and Grandparents by Yakov Fain

По теме:

  • Комментарии