- •Лабораторная работа №5 Обработка событий в Swing
- •Теоретические сведения
- •Паттерн проектирования «наблюдатель»
- •Механизм обработки событий библиотеки Swing
- •Интерфейс MouseListener и обработка событий от мыши
- •Создание слушателей с помощью анонимных классов
- •Класс MouseAdapter
- •Общая структура слушателей
- •Слушатель колесика мышки MouseWheelListener
- •Слушатель клавиатуры KeyListener
- •Слушатель изменения состояния ChangeListener
- •Слушатель событий окна WindowListener
- •Слушатель фокуса FocusListener
- •Слушатель событий компонента СomponentListener
- •Слушатель выбора элемента ItemListener
- •Универсальный слушатель ActionListener
- •Работа с меню в библиотеке Swing
- •Создание главного меню
- •Обработка команд меню
- •Создание контекстного меню
- •Интерфейс Action (действие) и класс AbstractAction
- •Стандартные диалоговые окна Класс jOptionPane
- •Класс jFileChooser
- •Ход работы:
- •Контрольные вопросы:
Стандартные диалоговые окна Класс jOptionPane
Неотъемлемой частью большинства программ являются небольшие диалоговые окна: для вывода пользователю сообщения (например, сообщения об ошибке), для вопроса, ответ на который важен для выполнения текущего действия (например, просьба подтвердить или отменить запрашиваемую операцию). Эти диалоги могут быть запрограммированы вручную на основе класса JFrame. Однако ввиду того, что они являются типичными для многих программ, Swing предоставляет в распоряжение программиста несколько готовых классов для работы с ними.
Чаще всего используется класс JOptionPane, содержащий несколько статических методов, отображающих стандартные диалоги.
Метод showMessageDialog() выводит на экран диалоговое окно, информирующее пользователя. Оно содержит надпись, значок и кнопку ОК. Существует несколько разновидностей этого метода с разными наборами параметров. Самый простой из них showMessageDialog(Component component, Object content) требует указания компонента, над которым должно появиться диалоговое окно и содержимого окна. Чаще всего содержимым окна является некоторая строка, а вместо первого параметра передается null – тогда окно появляется по центру экрана. Более «продвинутый» вариант showMessageDialog(Component component, Object content, String title, int type) позволяет задать также свой заголовок окна и выбрать его тип (влияет на иконку в окне): сообщение об ошибке (ERROR_MESSAGE), предупреждение (WARNING_MESSAGE), информация (INFORMATION_MESSAGE).
Диалоговое окно является модальным. Это значит, что пока пользователь не нажмет в этом окне кнопку OK, программа окажется заблокирована – пользователь не сможет работать с другими окнами.
Пронаблюдаем действие метода на простом примере:
public class SimpleWindow extends JFrame {
private JButton button;
SimpleWindow() {
super("Предупреждающий диалог");
setDefaultCloseOperation(EXIT_ON_CLOSE);
button = new JButton("Информация");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(button, "Не надо было нажимать на эту кнопку","Информация", JOptionPane.WARNING_MESSAGE);
}
}
);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(button);
setSize(200,150);
}
}
Кнопка button сделана полем класса окна, чтобы можно было получить к ней доступ из анонимного класса-слушателя.
Другое часто используемое диалоговое окно – окно вопроса. В этом окне несколько кнопок, одну из которых пользователь должен нажать. В программу, вызывающую это диалоговое окно, возвращается информация о выборе пользователя, на основе которой и строится дальнейший ход работы программы.
Данное окно отображается методом showConfirmDialog(Component component, Object content). Параметры этого метода идентичны по смыслу параметрам showMessageDialog(), но в диалоговом окне появится не одна кнопка, а три: «Yes», «No» и «Cancel». Более того, метод возвращает значение, которое можно сравнить с константами YES_OPTION, NO_OPTION и CANCEL_OPTION. Логику работы с этим методом проиллюстрирует пример:
public class SimpleWindow extends JFrame {
JButton button;
SimpleWindow(){
super("Предупреждающий диалог");
setDefaultCloseOperation(EXIT_ON_CLOSE);
button = new JButton("Выход");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (JOptionPane.showConfirmDialog(button, "Вы уверены, что хотите выйти?") == JOptionPane.YES_OPTION) System.exit(0);
}
}
);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(button);
setSize(200,150);
}
}
Метод имеет еще четыре разновидности с разным набором параметров, позволяющих изменять заголовок и значок окна, а также набор кнопок.
