Как видите, сообщение message задается объектом самого общего типа Object. В качестве сообщения может появиться компонент класса Component, изображение типа Icon. Все остальные объекты преобразуются в строку методом toString(), строка помещается в созданный объект класса JLabel, который и выводится в окно сообщения. Параметром message может быть и массив типа Object []. В этом случае в окно будет выведено несколько сообщений.
На рис. 14.13 показано окно сообщения, созданное методом
JOptionPane.showMessageDialog(this," В поле \"Код\" могут быть только цифры."," Ошибка", JOptionPane.ERROR MESSAGE); |
---|
Рис. 14.13. Окно сообщения типа "Ошибка" |
Рис. 14.14. Окно подтверждения типа "Вопрос" |
Окно подтверждения или отмены действий содержит две или три кнопки: Yes (Да), No (Нет), Cancel (Отмена). Это обозначается константами yes_no_option или YES_NO_CANCEL_OPTION и регулируется параметром optType методов showConfirmDialog ( ). Сигнатура метода этого типа с самым большим числом параметров выглядит так:
static int showConfirmDialog(Component parent, Object message,
String title, int optType, int messType, Icon icon);
Метод возвращает одну из констант yes_option, no_option, cancel_option в зависимости от того, какая кнопка была нажата. При закрытии окна без всякого выбора возвращается значение closed_option. На рис. 14.14 показано окно подтверждения, используемое, например, так: int n = JOptionPane.showConfirmDialog(this,
"Сохранить этот/предыдущий вариант (Yes/No)?",
" Сохранение документа", JOptionPane.YES NO CANCEL OPTION,
JOptionPane.QUESTION_MESSAGE); switch(n){
case JOptionPane.YES OPTION: saveDoc(); break;
case JOptionPane.NO OPTION: restore(); saveDoc(); break;
case JOptionPane.CANCEL_OPTION:
case JOptionPane.CLOSED OPTION: break;
default:
}
Диалоговое окно ввода содержит поле для ввода краткого ответа, возвращаемого методом, или список выбора, а также кнопки OK и Cancel (Отмена). На рис. 14.15 показано окно, созданное методом
String s = (String)JOptionPane.showlnputDialog(this,
" Запишите ответ: ", " Ответ", JOptionPane.WARNING MESSAGE);
Рис. 14.15. Окно ввода типа "Предупреждение" |
Рис. 14.16. Окно ввода с вариантами ответа |
На рис. 14.16 показано окно, созданное методами
String[] vars = {"Первый", "Второй", "Третий"};
String s = (String)JOptionPane.showlnputDialog(this, "Выберите вариант ответа:", " Варианты ответа", JOptionPane.QUESTION MESSAGE, new ImageIcon("bird.gif"), vars, "Второй");
Для российских программистов, вечно озабоченных русификацией своих приложений, удобнее четвертый тип стандартных диалоговых окон, создаваемый методом
static int showOptionDialog(Component parent, Object message,
String title, int optType, int messType, Icon icon,
Object[] options, Object init);
Предпоследний параметр options задает надписи на кнопках диалогового окна или графические компоненты, выводимые в окно вместо кнопок. Последний параметр init выделяет одну из кнопок или графических компонентов.
Например, окно, показанное на рис. 14.14, будет лучше выглядеть, если его создать методами
String[] vars = {"Этот", "Предыдущий", "Не сохранять"};
int n = JOptionPane.showOptionDialog(this,
" Сохранить этот или предыдущий вариант?",
" Сохранение документа", JOptionPane.YES NO CANCEL OPTION,
JOptionPane.QUESTION_MESSAGE, null, vars, "Этот");
как показано на рис. 14.17.
Рис. 14.17. Окно с русскими надписями |
Рис. 14.18. Простейшее диалоговое окно |
Как видно из рисунков, каждое стандартное диалоговое окно содержит элементы: предопределенный выбранным L&F или собственный ярлык, сообщение, кнопки и, может быть, поле ввода. Если такое строение диалогового окна не устраивает разработчика, то он может создать собственное диалоговое окно класса JDialog, в которое поместить диалоговую панель JOptionPane. Для этого имеется семь конструкторов. Конструктор по умолчанию JOptionPane () создает диалоговую панель с кнопкой OK и стандартной строкой сообщения. Она показана на рис. 14.18. Этот рисунок создан методами
JOptionPane op = new JOptionPane();
JDialog d = op.createDialog(this, " Простейшее диалоговое окно"); d.setVisible(true);
Конструктор с наибольшим числом параметров выглядит так:
JOptionPane(Object message, int messType, int optType,
Icon icon, Object[] options, Object init);
у остальных конструкторов приняты значения по умолчанию отсутствующих параметров.
На рис. 14.19 представлено окно, созданное методами
String[] opts = {"Применить", "Отменить", "Перейти", "Завершить"};
JOptionPane op = new JOptionPane(