Стандартные диалоговые окна |
415 |
пустая строка. Если же пользователь отменил ввод щелчком на кнопке Cancel4, методы showInputDialog() вернут вам пустую (null) ссылку.
Вторая кнопка выводит на экран диалоговое окно, также получающее данные с помощью текстового поля; для его создания вам понадобится четыре параметра. Первые два параметра будут такими же, как и для только что рассмотренных диалоговых окон — это родительский компонент и сообщение (отметьте, кстати, что ради разнообразия мы записали сообщение массивом строк), в вот вторые два для нас внове. Третьим параметром является заголовок создаваемого диалогового окна, а четвертым — его тип (см. табл. 14.1). По умолчанию в методах showInputDialog() используются тип QUESTION_ MESSAGE и соответствующий стандартный значок, но, как видите, сменить его можно. В примере показано вполне реальное применение этой возможности: вы можете повысить уровень «опасности» диалогового окна для ввода данных (таким окном может быть, например, окно для ввода паролей).
Создаваемые с помощью первых двух кнопок диалоговые окна обеспечивают ввод данных с помощью текстовых полей, а вот третья кнопка иллюстрирует кое-что необычное — выбор варианта из нескольких известных альтернатив. Тут же вспоминается раскрывающийся список JComboBox, как раз и позволяющий выбирать из нескольких альтернатив. И на самом деле, класс JOptionPane использует для этой почетной миссии именно его. Правда, создание диалогового окна для такого выбора требует дополнительных хлопот: придется указывать целых семь параметров. Первые четыре нам знакомы — все тот же родительский компонент, сообщение, заголовок окна и его тип. Далее следует значок, вы можете и не задавать его, передав вместо него пустую (null) ссылку, в таком случае будет использован стандартный значок. Наконец, последние два параметра ведают непосредственно выбором — это массив доступных альтернатив (и в нем вы можете задействовать «вездесущий» язык HTML) и элемент, выбранный изначально. Запустив программу с примером и щелкнув на третьей кнопке, вы оцените, как работает данный вариант стандартного диалогового окна. Кстати, возвращается в этом случае выбранный элемент, один из тех, что вы передали ему в качестве доступных альтернатив, или null, если пользователь щелкнул на кнопке Cancel. Для демонстрации этого мы тут же, сразу после выбора, показываем выбранный элемент уже знакомым нам методом showMessageDialog().
4 «А как же локализованные приложения?» — спросите вы: «Можно ли изменять надписи на кнопках в стандартных диалоговых окнах?». Конечно, сделать это можно, и довольно просто. Надписи для кнопок UI-представитель извлекает из специальной таблицы с параметрами внешнего вида, UIDefaults. Получить доступ к этой таблице, то есть получить используемые в данный момент надписи или сменить их, позволяют особые методы get/set класса UIManager. К примеру, заменить кнопку Cancel кнопкой Отмена позволит строка UIManager.put(«OptionPane. cancelButtonText», «Отмена»).
416 |
ГЛАВА 14 |
В примере были представлены не все доступные варианты метода showInputDialog(). Так, варианты этого метода, используемые при щелчке на первой кнопке, могут быть еще проще — создаваемые диалоговые окна не требуют передачи ссылок на родительские компоненты и размещаются по центру рабочего стола пользователя. Но такой же эффект можно получить, передавая вместо родительских компонентов ссылки null, так что мы ничего не упустили.
Получение подтверждений
Следующая группа статических методов класса JOptionPane с общим названием showConfirmDialog() служит для вывода на экран стандартных диалоговых окон, запрашивающих у пользователя разрешение на совершение некоторого действия. Как правило, это запрос вида «Вы действительно хотите удалить файл?», который класс JOptionPane снабжает парой кнопок Да и Нет. Можно прибавить к этим трем кнопкам и кнопку отмены. Получив от пользователя положительный ответ, вы вправе считать, что он понимает последствия совершаемого действия и согласен на него. Рассмотрим несложный пример, в котором изучим все варианты метода showConfirmDialog():
//ConfirmDialogs.java
//Стандартные диалоговые окна для получения от
//пользователя подтверждения совершаемого действия import javax.swing.*;
import java.awt.event.*; import java.awt.*;
public class ConfirmDialogs extends JFrame { // значок для одного из сообщений
private Icon icon = new ImageIcon("goblet.png"); public ConfirmDialogs() {
super("ConfirmDialogs"); setDefaultCloseOperation(EXIT_ON_CLOSE);
// после щелчков на кнопках выводятся сообщения
JButton confirm1 = new JButton("2 и 4 параметра"); confirm1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
// диалоговое окно c 4-мя параметрами int res = JOptionPane.showConfirmDialog(
Стандартные диалоговые окна |
417 |
ConfirmDialogs.this, "Вы этого хотите?", "Вопрос", JOptionPane.YES_NO_CANCEL_OPTION);
// простейшие диалоговые окна
if ( res == JOptionPane.YES_OPTION ) JOptionPane.showConfirmDialog(
ConfirmDialogs.this, "Точно хотите?"); if ( res == JOptionPane.NO_OPTION )
JOptionPane.showConfirmDialog( ConfirmDialogs.this, "Значит, не хотите?");
}
});
JButton confirm2 = new JButton("5 параметров"); confirm2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int res = JOptionPane.showConfirmDialog(
ConfirmDialogs.this,
"Думайте тщательно, итак...", "Может произойти ошибка!", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE);
}
});
JButton confirm3 = new JButton("6 параметров"); confirm3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int res = JOptionPane.showConfirmDialog(
ConfirmDialogs.this, "Вам нравится значок?", "Полностью настроенное окно!", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, icon);
}
});
//добавляем кнопки в окно setLayout(new FlowLayout()); add(confirm1);
add(confirm2); add(confirm3);
//выводим окно на экран setSize(300, 200);
418 ГЛАВА 14
setVisible(true);
}
public static void main(String[] args) { SwingUtilities.invokeLater(
new Runnable() {
public void run() { new ConfirmDialogs(); } });
}
}
В примере мы создаем небольшое окно с рамкой JFrame, в котором разместятся три кнопки. Щелкая на этих кнопках, вы будете вызывать на экран стандартные диалоговые окна, созданные различными вариантами метода showConfirmDialog() класса
JOptionPane.
Первая кнопка демонстрирует сразу два вида диалоговых окон, созданных самыми простыми вариантами метода с названием showConfirmDialog(). Для начала на экране появляется диалоговое окно, созданное методом, принимающим четыре параметра — это родительский компонент, сообщение для отображения (в качестве сообщения могут выступать любые объекты, перечисленные нами в табл. 14.2, или массив таких объектов), заголовок окна, а также константа из класса JOptionPane, указывающая, набор каких альтернатив будет представлен пользователю для выбора (эти альтернативы появятся внизу диалогового окна в виде набора кнопок). Константы, которые обычно применяются для диалоговых окон, создаваемых методом showConfirmDialog(), перечислены в табл. 14.3.
Таблица 14.3. Константы класса JOptionPane, задающие набор альтернатив для диалоговых окон, запрашивающих подтверждение
Константа Описание
YES_NO_CANCEL_OPTION Этот набор альтернатив по умолчанию применяется в диалоговых
окнах, создаваемых методом showConfirmDialog(). При использова-
нии данного набора в окне появляются кнопки Да, Нет и Отмена
YES_NO_OPTION Набор альтернатив практически идентичен предыдущему за одним исключением — в окне не будет кнопки Отмена
OK_CANCEL_OPTION При использовании этого набора альтернатив в диалоговом окне вме-
сто кнопок Да и Нет появятся кнопки ОК и Отмена
Как правило, вариант метода showConfirmDialog() с четырьмя параметрами применяется в программах чаще остальных: он сочетает в себе легкость и полноту настройки с простотой вызова. Значения, которые могут возвращать варианты метода showConfirmDialog(), перечислены в табл. 14.4.
Таблица 14.4. Значения, возвращаемые методом showConfirmDialog()
Значение |
Описание |
YES_OPTION (OK_OPTION) Это значение возвращается, если пользователь подтвердил свое на- |
|
|
мерение произвести некоторое действие, щелкнув на соответствую- |
|
щей кнопке (Да или ОК) |
NO_OPTION |
Это значение вы получите в том случае, если пользователь отказался |
|
от своего намерения, щелкнув на кнопке Нет |
Стандартные диалоговые окна |
419 |
|
Таблица 14.4 (продолжение) |
|
|
|
|
|
Значение |
Описание |
|
CANCEL_OPTION |
Первое значение возвращается, если пользователь |
не пожелал |
(CLOSED_OPTION) |
в данный момент отвечать на вопрос диалогового окна, щелкнув на |
|
|
кнопке Отмена. Второе значение показывает, что пользователь про- |
|
|
сто закрыл диалоговое окно. Как правило, этот вариант ничем не от- |
|
|
личается от отмены |
|
В примере мы проверяем, какой выбор сделал пользователь, и в зависимости от него предлагаем еще одно диалоговое окно с окончательным подтверждением сделанного выбора. Второе диалоговое окно создается самым лаконичным вариантом метода showConfirmDialog(): он принимает всего два параметра: родительский компонент (вы можете указать и пустую ссылку null, в этом случае диалоговое окно будет размещено по центру главного окна или рабочего стола пользователя, в зависимости от версии JDK) и само сообщение. В качестве набора альтернатив такого окна будет использован набор
YES_NO_OPTION. Заметьте, параметры для метода showConfirmDialog() класса JOptionPane
идентичны параметрам других уже рассмотренных нами методов данного класса, что без сомнения облегчает работу с ними.
Вторая кнопка демонстрирует, как выглядит диалоговое окно для получения подтверждения, созданное методом showConfirmDialog() с пятью параметрами. Первые четыре параметра неизменны, а в пятом параметре вы сможете указать тип диалогового окна; доступные типы стандартных диалоговых окон мы уже описали в табл. 14.1. В примере мы создаем диалоговое окно для получения подтверждения пользователя, одновременно (с помощью пятого параметра) придавая ему стиль окна, сообщающего об ошибке. В некоторых ситуациях подобная комбинация способна лучше выразить важность задаваемого пользователю вопроса, нежели простая форма диалогового окна.
Ну и наконец, самая полная форма метода showConfirmDialog(), с шестью параметрами, практически ничем не отличается от формы с пятью параметрами, за исключением именно шестого параметра — это значок Icon, который будет отображен в диалоговом