Обработка событий
Теперь напишем класс-контейнер, в котором находятся источники tf и события ActionEvent, и подключим к ним слушателя этого события TextMove, передав им ссылки на него методом addActionListener(), как показано в листинге 12.1.
Листинг 12.1. Обработка события ActionEvent.
import java.awt.*; import java.awt.event.*; class MyNotebook extends Frame{ MyNotebook(String title) { super(title); TextField tf = new TextField("Вводите текст", 50); add(tf, BorderLayout.NORTH); TextArea ta = new TextArea(); ta.setEditable(false); add(ta); Panel p = new Panel(); add(p, BorderLayout.SOUTH); Button b = new Button("Перенести"); p.add(b); tf.addActionListener(new TextMove(tf, ta)); b.addActionListener(new TextMove(tf, ta)); setSize(300, 200); setVisible(true); } public static void main(String[] args){ Frame f = new MyNotebook(" Обработка ActionEvent"); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit(0); } }); } } // Текст класса TextMove //…
На рис. 12.2 показан результат работы с этой программой.
В листинге 12.1 в методах addActionListener() создаются два экземпляра класса TextMove – для прослушивания поля tf и для прослушивания кнопки. Можно создать один экземпляр класса TextMove, он будет прослушивать оба компонента:
TextMove tml = new TextMove(tf, ta); tf.addActionListener(tml); b.addActionListener(tml);
Но в первом случае экземпляры создаются после наступления события в соответствующем компоненте, а во втором – независимо от того, наступило событие или нет, что приводит к расходу памяти, даже если событие не произошло. Решайте сами, что лучше.
Рис. 12.2. Обработка события ActionEvent
Класс, содержащий источники события, может сам обрабатывать его. Вы можете самостоятельно прослушивать компоненты в своей квартире, установив пульт сигнализации у кровати.
Для этого достаточно реализовать соответствующий интерфейс прямо в классе-контейнере, как показано в листинге 12.2.