Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Тема 7.6 Использование кнопок и обработка событий
Кнопка является одним из самых простых управляющих элементов Swing. В то же время она используется чаще других компонентов. Кнопка представляет собой экземпляр класса JButton. Этот класс является потомком абстрактного класса AbstractButton, в котором определены функции, общие для всех кнопок. На кнопке может отображаться текст, изображение или информация обоих типов. В данном модуле используются только кнопки с надписями в виде строки текста. Класс JButton содержит три конструктора. Один из них имеет следующий вид: JButton(Stringmsg) Параметр msg определяет строку, которая должна отображаться на кнопке. По щелчку на кнопке генерируется событие ActionEvent. Для регистрации и отключения обработчиков данного события JButton предоставляет следующие методы (они унаследованы от класса AbstractButton): void addActionListener(ActionListener al) void removeActionListener(ActionListener al) Здесь параметр al задает объект, который будет оповещаться о возникновении событий. Объект должен представлять собой экземпляр класса, реализующего интерфейс ActionListener. В интерфейсе ActionListener определен только один метод: actionPerformed(). Объявление этого метода выглядит следующим образом: void actionPerformed(ActionEventae) Данный метод вызывается по щелчку на кнопке, т.е. он занимается обработкой событий, связанных с действиями пользователя с кнопкой. Реализуя метод actionPerformed(), необходимо позаботиться о том, чтобы он быстро выполнял свою задачу и возвращал управление. Как было сказано ранее, обработчики не должны выполнять длительных операций, поскольку это может привести к замедлению работы всего приложения. Если же обработка события предполагает действия, требующие длительного времени, их надо выполнять в потоке, специально создаваемом для этой цели. Объект ActionEvent, передаваемый методу actionPerformed(), позволяет получить важную информацию, связанную с событием данного типа. В данном модуле мы будем использовать строку команды действия, связанной с кнопкой. По умолчанию в качестве команды действия принимается строка, отображаемая на кнопке. Для получения команды действия надо вызвать метод getActionCommand(), принадлежащий объекту события. Он объявляется следующим образом: StringgetActionCommand() Команда действия идентифицирует кнопку. Таким образом, если в приложении имеется несколько кнопок, команда действия позволяет достаточно просто определить, какая из них явилась источником события. Листинг 7.2 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class MyFrame extends JFrame implements ActionListener { private JPanel panel; private JLabel label1, label2; private JButton button1, button2; private JTextField textField1, textField2; public MyFrame() { //установка заголовка и размеров фрейма setTitle(" Заголовок" ); setBounds(700, 300, 200, 150); panel = new JPanel(); //создание всех компонент label1 = new JLabel(" Метка 1" ); label2 = new JLabel(" Метка 2" ); button1 = new JButton(" Кнопка 1" ); button2 = new JButton(" Кнопка 2" ); textField1 = new JTextField(" Новыйтекст1", 10); textField2 = new JTextField(" Новыйтекст2", 10); // добавление компонент к панели panel.add(label1); panel.add(label2); panel.add(button1); panel.add(button2); panel.add(textField1); panel.add(textField2); //добавление панели к фрейму add(panel); //добавление кнопок к прослушиванию button1.addActionListener(this); button2.addActionListener(this); // установка операции по нажатию на крестик setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // прорисовкафрейма setVisible(true); } @Override public void actionPerformed(ActionEvent e) { //в метку 1 выводим текст из текстового поля 1 if (e.getActionCommand().equals(" Кнопка 1" )) { label1.setText(textField1.getText()); } //в метку 2 выводим текст из текстового поля 2 if (e.getActionCommand().equals(" Кнопка 2" )) { label2.setText(textField2.getText()); } } }
public class Main { public static void main(String[] args) { new MyFrame(); } }
На рисунке 7.2 показан фрейм до нажатия на кнопки, а на рисунке 7.3 – после.
Рисунок 7.2 Рисунок 7.3 Если элементов много, то обрабатывать сабытия в одном методе не очень удобно. В листинге 7.3 приведен пример того же класса, только обработка событий сделана с помощью неименованных внутренних классов. Листинг 7.3 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class MyFrame extends JFrame { private JPanel panel; private JLabel label1, label2; private JButton button1, button2; private JTextField textField1, textField2; public MyFrame() { //установка заголовка и размеров фрейма setTitle(" Заголовок" ); setBounds(700, 300, 200, 150); panel = new JPanel(); //создание всех компонент label1 = new JLabel(" Метка 1" ); label2 = new JLabel(" Метка 2" ); button1 = new JButton(" Кнопка 1" ); button2 = new JButton(" Кнопка 2" ); textField1 = new JTextField(" Новыйтекст1", 10); textField2 = new JTextField(" Новыйтекст2", 10); // добавление компонент к панели panel.add(label1); panel.add(label2); panel.add(button1); panel.add(button2); panel.add(textField1); panel.add(textField2); //добавление панели к фрейму add(panel);
//добавление кнопок к прослушиванию button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { label1.setText(textField1.getText()); } });
button2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { label2.setText(textField2.getText()); } }); // установка операции по нажатию на крестик setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // прорисовка фрейма setVisible(true); } }
Популярное:
|
Последнее изменение этой страницы: 2016-05-30; Просмотров: 447; Нарушение авторского права страницы