Читайте также:
|
|
Изучение inner -классов и, в частности, анонимных классов дает нам возможность продвинуться дальше в знакомстве с возможностями визуальной среды Java — с пакетом Swing.
Рассмотрим такие элементы библиотеки Swing как класс JButton и класс JTextField.
Класс JButton предназначен для создания кнопок. Посмотрим документацию по классу JButton и обратим внимание на его конструктор
public JButton(String text)
Он создает кнопку с надписью. Текст надписи задан параметром.
А также на метод
public void addActionListener(ActionListener l)
Он добавляет слушателя типа ActionListener к данной кнопке
Этот метод унаследован классом JButton от класса AbstractButton.
Если, в свою очередь, посмотреть на описание ActionListener, то можно увидеть, что это интерфейс из пакета java.awt.event и что этот интерфейс имеет единственный метод
public void actionPerformed(ActionEvent e)
Т.е. для того, чтобы добавить слушателя, мы должны создать класс, удовлетворяющий интерфейсу ActionListener, и создать объект этого класса (тут нам как раз пригодятся анонимные классы).
Смысл всего этого в том, что при нажатии на кнопку будет вызван метод actionPerformed(...), где мы можем запрограммировать все необходимые нам действия.
Это все, что нам сейчас нужно по классу JButton.
Класс JTextField используется для создания полей ввода. Наиболее часто используемый конструктор это
public JTextField()
Он создает поле ввода
Как и JButton он имеет метод addActionListener(...). Отличие от JButton заключается в том, что метод actionPerformed(...) в данном случае вызывается при выходе из поля ввода по клавише Enter.
Рассмотрим механизм работы обработчиков событий, на примере объектов JTextField и JButton.
// ListenersButtonField.java
1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4 public class ListenersButtonField extends JFrame {
5 JTextField fld = new JTextField();
6 JButton btn = new JButton("объект JButton");
7 JLabel lbl = new JLabel(" ");
8 ListenersButtonField () {
9 super("Слушатели (listeners) полей и кнопок");
10 setSize(400, 150);
11 Container c = getContentPane();
12 c.add(fld, BorderLayout.NORTH);
13 c.add(lbl, BorderLayout.CENTER);
14 c.add(btn, BorderLayout.SOUTH);
15 fld.addActionListener(
16 new ActionListener(){
17 public void actionPerformed(ActionEvent e) {
18 lbl.setText("Введен текст в объект
JTextField:"+fld.getText());
19 }
20 });
21 btn.addActionListener(new ActionListener(){
22 public void actionPerformed(ActionEvent e) {
23 lbl.setText("Нажата кнопка");
24 }
25 });
26 setVisible(true);
27 }
28 public static void main(String[] args) {
29 ListenersButtonField app=new ListenersButtonField ();
30 app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
31 }
32 }
Рис 20.1 Результат взаимодействия с объектом JTextField
Рис 20.2 Результат взаимодействия с объектом JButton
В этом примере в класс ListenersButtonField мы поместили три поля fld, btn и lbl, которые предназначены для создания поля ввода, кнопки и метки, соответственно. Строки
c.add(fld, BorderLayout.NORTH);
c.add(lbl, BorderLayout.CENTER);
c.add(btn, BorderLayout.SOUTH);
предназначены для размещения указанных визуальных компонент на экране. Далее следует создание слушателей поля и кнопки. Оба слушателя выводят некоторую информацию в метку lbl, для чего используется метод setText(...) класса JLabel. Кроме того, для выборки текста, введенного в поле fld, в примере использован метод getText() класса JTextField.
Первый этап обработки события – это регистрация обработчика события в строках 15 (для поля fld) и 20 (для кнопки btn). Для обработки события создается анонимный внутренний класс, реализующий интерфейс ActionListener (строка 16). Интерфейс ActionListener содержит единственный метод actionPerformed, который должен быть реализован. Реализация метода actionPerformed и содержит выполнение тех действий, которые являются реакцией на событие. При вводе текста и нажатии клавиши Enter в метке появляется текст на рис 20.1 (строки 16-18), при нажатии на кнопку – появляется текст на рис 20.2 (строки 21-23).
Следующий пример демонстрирует создание объекта JButton, где обработчик событий для кнопки представлен одним экземпляром внутреннего класса ButtonHandler (строки 21-25)
// ButtonTest.java
1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4 public class ButtonTest extends JFrame{
5 private JButton plainButton;
6 public ButtonTest(){
7 super("Тест кнопки");
8 Container c=getContentPane();
9 c.setLayout(new FlowLayout ());
10 plainButton=new JButton("Простая кнопка");
11 c.add(plainButton);
12 ButtonHandler handler=new ButtonHandler();
13 plainButton.addActionListener(handler);
14 setSize(300,100);
15 setVisible(true);
16 }
17 public static void main(String args[]){
18 ButtonTest appl=new ButtonTest();
19 appl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
20 }
21 private class ButtonHandler implements ActionListener{
22 public void actionPerformed(ActionEvent event){
23 JOptionPane.showMessageDialog(null,
"Вы нажали кнопку \n"+
event.getActionCommand());
24 }
25 }
26 }
Рис 20.3 Создание бъекта JButton в окне JFrame
Рис 20.4 Результат взаимодействия с объектом JButton
Объекты класса JButton (как и JTextField)генерируют события ActionEvent. В строках 12-13 регистрируется объект ActionListener для компонента JButton. Внутренний класс ButtonHandler (строки 21-25)определяет метод actionPerformed, из которого выводится диалоговое окно с сообщением. Метод getActionCommand класса ActionEvent (строка23)возвращает метку кнопки, инициировавшей событие.
…………………………….
Дата добавления: 2015-10-29; просмотров: 109 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Менеджеры компоновки | | | Обработка событий мыши |