Читаем Java 7 полностью

TextMove tml = new TextMove(tf, ta); tf.addActionListener(tml); b.addActionListener(tml);

Но в первом случае экземпляры создаются после наступления события в соответствующем компоненте, а во втором — независимо от того, наступило событие или нет, что приводит к расходу памяти, даже если событие не произошло. Решайте сами, что лучше.

Рис. 15.2. Обработка события ActionEvent

Самообработка событий

Класс, содержащий источники события, может сам обрабатывать его. Возвращаясь к примеру с установкой охранной сигнализации, можно сказать, что вы способны самостоятельно прослушивать компоненты в своей квартире, установив пульт сигнализации у кровати. Для этого достаточно реализовать соответствующий интерфейс прямо в классе-контейнере, как показано в листинге 15.2.

Листинг 15.2. Самообработка события ActionEvent

import java.awt.*; import java.awt.event.*; import javax.swing.*;

class MyNotebook extends JFrame implements ActionListener{ private JTextField tf; private JTextArea ta;

MyNotebook(String title){ super(title);

tf = new JTextField("Вводите текст", 50); add(tf, BorderLayout.NORTH);

ta = new JTextArea(); ta.setEditable(false); add(ta);

JPanel p = new JPanel(); add(p, BorderLayout.SOUTH);

JButton b = new JButton("Перенести"); p.add(b);

tf.addActionListener(this); b.addActionListener(this);

setSize(300, 200); setVisible(true);

}

public void actionPerformed(ActionEvent ae){ ta.append(tf.getText()+"\n");

}

public static void main(String[] args){

JFrame f = new MyNotebook(" Обработка ActionEvent"); f.setDefaultCloseOperation(EXIT ON CLOSE);

}

}

Здесь поля tf и ta уже не локальные переменные, а переменные экземпляра, поскольку они используются и в конструкторе, и в методе actionPerformed (). Этот метод теперь — один из методов класса MyNotebook. Класс MyNotebook стал классом-обработчиком события ActionEvent — он реализует интерфейс ActionListener. В методе addActionListener() указывается аргумент this — класс сам слушает свои компоненты.

Рассмотренная схема, кажется, проще и удобнее, но она предоставляет меньше возможностей. Если вы захотите изменить обработку, например заносить записи в поле ta по алфавиту или по времени выполнения заданий, то придется переписать и перекомпилировать класс MyNotebook.

Обработка вложенным классом

Еще один вариант — сделать обработчик вложенным классом. Это позволяет обойтись без переменных экземпляра и конструктора в классе-обработчике TextMove, как показано в листинге 15.3.

Листинг 15.3. Обработка вложенным классом

import java.awt.*; import java.awt.event.*; import javax.swing.*;

class MyNotebook extends JFrame{ private JTextField tf; private JTextArea ta;

MyNotebook(String title){ super(title);

tf = new JTextField("Вводите текст", 50);

add(tf, BorderLayout.NORTH); ta = new JTextArea(); ta.setEditable(false); add(ta);

JPanel p = new JPanel(); add(p, BorderLayout.SOUTH);

JButton b = new JButton("Перенести"); p.add(b);

tf.addActionListener(new TextMove()); b.addActionListener(new TextMove());

setSize(300, 200); setVisible(true);

}

public static void main(String[] args){

JFrame f = new MyNotebook(" Обработка ActionEvent"); f.setDefaultCloseOperation(EXIT ON CLOSE);

}

// Вложенный класс

class TextMove implements ActionListener{

public void actionPerformed(ActionEvent ae){ ta.append(tf.getText()+"\n");

}

}

}

Наконец, можно создать безымянный вложенный класс, что мы и делали в этой и предыдущих главах, обрабатывая нажатие комбинации клавиш + или щелчок кнопкой мыши по кнопке закрытия окна AWT. При этом возникает событие типа WindowEvent, для его обработки мы обращались к методу windowClosing ( ), реализуя его обращением к методу завершения приложения System.exit(0). Но для этого нужно иметь суперкласс определяемого безымянного класса, такой как WindowAdapter. Такими суперклассами могут быть классы-адаптеры, о них речь пойдет чуть позднее.

Перейдем к детальному рассмотрению разных типов событий.

Упражнение

1. Реализуйте обработку события безымянным вложенным классом.

<p><strong>Событие <emphasis>ActionEvent</emphasis></strong></p>

Это простое событие означает, что надо выполнить какое-то действие. При этом неважно, что вызвало событие: щелчок мыши, нажатие клавиши или что-то другое.

В классе ActionEvent есть два полезных метода:

□ getActionCommand ( ) возвращает в виде строки String надпись на кнопке JButton,

точнее, то, что установлено методом setActionCommand(String s) класса JButton, выбранный пункт меню или списка JList, или что-то другое, зависящее от компонента;

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных