Spec-Zone .ru
спецификации, руководства, описания, API
|
Диалоговое окно является независимым подокном, предназначенным, чтобы перенести временное уведомление кроме основного Окна приложения Swing. Большинство Диалоговых окон представляет сообщение об ошибке или предупреждение пользователю, но Диалоговые окна могут представить изображения, деревья каталогов, или примерно что-либо совместимое с основным Приложением Swing, которое управляет ими.
Для удобства несколько компонентных классов Swing могут непосредственно инстанцировать и вывести на экран диалоговые окна. Чтобы создать простые, стандартные диалоговые окна, Вы используете JOptionPane
class. ProgressMonitor
class может поднять диалоговое окно, которое показывает продвижение работы. Два других класса, JColorChooser
и JFileChooser
, также предоставьте стандартные диалоговые окна. Чтобы перевести диалоговое окно печати в рабочее состояние, можно использовать API JDialog
Код для простых диалоговых окон может быть минимальным. Например, вот информационное диалоговое окно:
Вот код, который создает и показывает это:
JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.");
Остальная часть этого раздела затрагивает следующие темы:
Каждое диалоговое окно зависит от компонента Фрейма. Когда тот Фрейм уничтожается, так его зависимые Диалоговые окна. Когда фрейм представляется в виде значка, его зависимые Диалоговые окна также исчезают из экрана. Когда фрейм является deiconified, его зависимые Диалоговые окна возвращаются к экрану. Колебание JDialog class наследовало это поведение от AWT Dialog
class.
Диалоговое окно может быть модальным. Когда модальное Диалоговое окно видимо, оно блокирует ввод данных пользователем ко всем другим окнам в программе. JOptionPane создает JDialog
s, которые модальны. Чтобы создать немодальное Диалоговое окно, следует использовать JDialog
class непосредственно.
Запускаясь с JDK 6, можно изменить поведение модальности диалогового окна, используя новый API Модальности. См.
JDialog
class является подклассом AWT java.awt.Dialog
Dialog
объект. Они - те же самые функции это JFrame
имеет, и использование JDialog
непосредственно очень подобно использованию JFrame
. Если Вы собираетесь использовать JDialog
непосредственно, тогда следует понять материал в Использовании Высокоуровневых Контейнеров и Как Сделать Фреймы, особенно Отвечая на Закрывающие окно События.
Даже когда Вы используете JOptionPane
чтобы реализовать диалоговое окно, Вы все еще используете a JDialog
негласно. Причина - это JOptionPane
просто контейнер, который может автоматически создать a JDialog
и добавьте себя к JDialog
's область контента.
Вот изображение приложения, которое выводит на экран диалоговые окна.
Используя JOptionPane
, можно быстро создать и настроить несколько различных видов диалоговых окон. JOptionPane
оказывает поддержку для того, чтобы разметить стандартные диалоговые окна, обеспечивая значки, определяя диалоговый title и текст, и настраивая текст кнопки. Другие функции позволяют Вам настраивать компоненты диалоговые дисплеи и определять, где диалоговое окно должно казаться экранным. Можно даже определить что область опции, помещенная непосредственно во внутреннюю рамку (JInternalFrame
) вместо a JDialog
.
Когда Вы создаете a JOptionPane
, стиль определенный код добавляет компоненты к JOptionPane
и определяет расположение тех компонентов.
JOptionPane
's поддержка значка позволяет Вам легко определять, какой значок диалоговое окно выводит на экран. Можно использовать пользовательский значок, никакой значок вообще, или любой из четырех стандартов JOptionPane
значки (вопрос, информация, предупреждение, и ошибка). У каждого стили есть свои собственные версии четырех стандартных значков. Следующие данные показывают значки, используемые в Java (и Windows) стиль.
Описание значка | Стиль Java | Стиль Windows |
---|---|---|
вопрос | ||
информация | ||
предупреждение | ||
ошибка |
Для самых простых модальных диалоговых окон Вы создаете и показываете диалоговое окно, используя один из JOptionPane
's showXxxDialog
методы. Если Ваше диалоговое окно должно быть внутренней рамкой, то добавьте Internal
после show
— например, showMessageDialog
изменения к showInternalMessageDialog
. Если Вы должны управлять закрывающим диалоговое окно поведением или если Вы не хотите, чтобы диалоговое окно было модально, то следует непосредственно инстанцировать JOptionPane
и добавьте это к a JDialog
экземпляр. Затем вызовите setVisible(true)
на JDialog
заставить это появиться.
Самые полезные два showXxxDialog
методы showMessageDialog
и showOptionDialog
. showMessageDialog
метод выводит на экран простое, диалоговое окно с одной кнопкой. showOptionDialog
метод выводит на экран специализированное диалоговое окно — он может вывести на экран множество кнопок со специализированным текстом кнопки, и может содержать стандартное текстовое сообщение или набор компонентов.
Другие два showXxxDialog
методы используются менее часто. showConfirmDialog
метод просит, чтобы пользователь подтвердил что-то, но представляет текст стандартной кнопки (Да/Нет или локализованный эквивалент, например), а не текст кнопки, настроенный к пользовательской ситуации (Запустите/Отмените, например). Четвертый метод, showInputDialog
, разрабатывается, чтобы вывести на экран модальное диалоговое окно, которое получает строку от пользователя, используя или текстовое поле, недоступное для редактирования поле комбинированного списка или список.
Вот некоторые примеры, взятые от DialogDemo.java
, из использования showMessageDialog
, showOptionDialog
, и JOptionPane
конструктор. Для большего количества примера кода см. DialogDemo.java
и другие программы, перечисленные в Примерах то Использование Диалоговые окна.
showMessageDialog
showMessageDialog
:
//default title and icon JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green."); |
|
//custom title, warning icon JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "Inane warning", JOptionPane.WARNING_MESSAGE); |
|
//custom title, error icon JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "Inane error", JOptionPane.ERROR_MESSAGE); |
|
//custom title, no icon JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "A plain message", JOptionPane.PLAIN_MESSAGE); |
|
//custom title, custom icon JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "Inane custom dialog", JOptionPane.INFORMATION_MESSAGE, icon); |
showOptionDialog
//Custom button text Object[] options = {"Yes, please", "No, thanks", "No eggs, no ham!"}; int n = JOptionPane.showOptionDialog(frame, "Would you like some green eggs to go " + "with that ham?", "A Silly Question", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[2]); |
JOptionPane
(конструктор)JOptionPane
с указанными кнопками, значками, сообщением, title, и так далее. Следует тогда добавить область опции к a JDialog
, зарегистрируйте слушателя изменения свойства на области опции, и покажите диалоговое окно. См., что Останавливающееся Автоматическое Диалоговое окно Закрывается для деталей.
final JOptionPane optionPane = new JOptionPane( "The only way to close this dialog is by\n" + "pressing one of the following buttons.\n" + "Do you understand?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION); |
Параметры всему из showXxxDialog
методы и JOptionPane
конструкторы стандартизируются, хотя число параметров за каждый метод и конструктора изменяется. Следующий список описывает каждый параметр. Чтобы видеть точный список параметров за определенный метод, см. Диалоговый API.
Component parentComponent
showXxxDialog
метод всегда является родительским компонентом, который должен быть Фреймом, компонентом во Фрейме, или нулем. Если Вы определите Фрейм или Диалоговое окно, то Диалоговое окно будет появляться по центру Фрейма и следовать за поведением фокуса того Фрейма. Если Вы определите компонент во Фрейме, то Диалоговое окно появится по центру того компонента и будет следовать за поведением фокуса Фрейма того компонента. Если Вы определите нуль, то стиль выберет соответствующую позицию для диалогового окна — обычно, центр экрана — и Диалоговое окно будет не обязательно следовать за поведением фокуса любого видимого Фрейма или Диалогового окна. JOptionPane
конструкторы не включают этот параметр. Вместо этого Вы определяете родительский фрейм, когда Вы создаете JDialog
это содержит JOptionPane
, и Вы используете JDialog
setLocationRelativeTo
метод, чтобы установить диалоговую позицию.
Object message
\n
) символы в строке сообщения. Например: "Complete the sentence:\n \"Green eggs and...\""
String title
int optionType
DEFAULT_OPTION
, YES_NO_OPTION
, YES_NO_CANCEL_OPTION
, OK_CANCEL_OPTION
.int messageType
PLAIN_MESSAGE
(никакой значок), ERROR_MESSAGE
, INFORMATION_MESSAGE
, WARNING_MESSAGE
, QUESTION_MESSAGE
.Icon icon
Object[] options
Object initialValue
Можно или позволить опции разделять дисплей на области ее значок значения по умолчанию или определять значок, используя тип сообщения или параметр значка. По умолчанию, область опции, создаваемая с showMessageDialog
выводит на экран информационный значок, один создаваемый с showConfirmDialog
или showInputDialog
выводит на экран значок вопроса, и один создаваемый с a JOptionPane
конструктор не выводит на экран значка. Чтобы определить, что диалоговое окно выводит на экран стандартный значок или никакой значок, определите тип сообщения, соответствующий значку, которого Вы требуете. Чтобы определить пользовательский значок, используйте параметр значка. Параметр значка имеет приоритет по типу сообщения; пока у параметра значка есть ненулевое значение, диалоговое окно выводит на экран указанный значок.
Когда Вы используете JOptionPane
чтобы создать диалоговое окно, можно или использовать текст стандартной кнопки (который мог бы измениться стилем и локалью), или определите различный текст. По умолчанию тип области опции определяет, сколько кнопок появляется. Например, YES_NO_OPTION
у диалоговых окон есть две кнопки, и YES_NO_CANCEL_OPTION
у диалоговых окон есть три кнопки.
Следующий код, взятый от DialogDemo.java
, создает два Да/Нет диалоговые окна. Первое диалоговое окно реализуется с showConfirmDialog
, который использует формулировку стили для этих двух кнопок. Второе диалоговое использование showOptionDialog
таким образом, это может настроить формулировку. За исключением формулировки изменений, диалоговые окна идентичны.
//default icon, custom title int n = JOptionPane.showConfirmDialog( frame, "Would you like green eggs and ham?", "An Inane Question", JOptionPane.YES_NO_OPTION); |
|
Object[] options = {"Yes, please", "No way!"}; int n = JOptionPane.showOptionDialog(frame, "Would you like green eggs and ham?", "A Silly Question", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, //do not use a custom Icon options, //the titles of buttons options[0]); //default button title |
Поскольку предыдущие фрагменты кода показали, showMessageDialog
, showConfirmDialog
, и showOptionDialog
методы возвращают целое число, указывающее на выбор пользователя. Значения для этого целого числа YES_OPTION
, NO_OPTION
, CANCEL_OPTION
, OK_OPTION
, и CLOSED_OPTION
. За исключением CLOSED_OPTION
, каждая опция соответствует кнопке нажатый пользователь. Когда CLOSED_OPTION
возвращается, это указывает, что пользователь, закрытый диалоговое окно явно, а не выбирая кнопку в опции, разделяет на области.
Даже если Вы изменяете строки, которые выводят на экран стандартные диалоговые кнопки, возвращаемое значение является все еще одним из предопределенных целых чисел. Например, a YES_NO_OPTION
диалоговое окно всегда возвращает одно из следующих значений: YES_OPTION
, NO_OPTION
, или CLOSED_OPTION
.
Единственная форма showXxxDialog
это не возвращается, целое число showInputDialog
, который возвращается Object
вместо этого. Это Object
обычно a String
отражение выбора пользователя. Вот пример использования showInputDialog
создать диалоговое окно, которое позволяет пользователю выбирать одну из трех строк:
Object[] possibilities = {"ham", "spam", "yam"}; String s = (String)JOptionPane.showInputDialog( frame, "Complete the sentence:\n" + "\"Green eggs and...\"", "Customized Dialog", JOptionPane.PLAIN_MESSAGE, icon, possibilities, "ham"); //If a string was returned, say so. if ((s != null) && (s.length() > 0)) { setLabel("Green eggs and... " + s + "!"); return; } //If you're here, the return value was null/empty. setLabel("Come on, finish the sentence!");
Если Вы не хотите ограничить варианты пользователя, можно или использовать форму showInputDialog
метод, который берет меньше параметров или определяет null
для массива объектов. В стили Java, занимая место null
для possibilities
результаты в диалоговом окне, которое имеет текстовое поле и похоже на это:
Поскольку пользователь может ввести что-либо в текстовое поле, Вы могли бы хотеть проверить возвращенное значение и попросить, чтобы пользователь попробовал еще раз, если это недопустимо. Другой подход должен создать пользовательское диалоговое окно, которое проверяет вводимых пользователем данных прежде, чем это возвратится. См. CustomDialog.java
для примера проверки допустимости данных.
Если Вы разрабатываете пользовательское диалоговое окно, Вы должны разработать API своего диалогового окна так, чтобы можно было запросить диалоговое окно о том, что выбрал пользователь. Например, CustomDialog
имеет a getValidatedText
метод, который возвращает текст вводимый пользователь.
По умолчанию, когда пользователь щелкает по a JOptionPane
- создаваемая кнопка, диалоговые завершения. Но что, если Вы хотите проверить ответ пользователя прежде, чем закрыть диалоговое окно? В этом случае следует реализовать своего собственного слушателя изменения свойства так, чтобы, когда пользователь нажимает кнопку, диалоговое окно автоматически не закрылось.
DialogDemo
содержит два диалоговых окна, которые реализуют слушателя изменения свойства. Одно из этих диалоговых окон является пользовательским модальным диалоговым окном, реализованным в CustomDialog
, это использует JOptionPane
и чтобы получить стандартный значок и получить помощь расположения. Другое диалоговое окно, код которого ниже, использует стандарт Да/Нет JOptionPane
. Хотя это диалоговое окно довольно бесполезно как записано, его код достаточно прост, что можно использовать его в качестве шаблона для более сложных диалоговых окон.
Помимо установки свойства изменяют слушателя, следующий код также вызывает JDialog
's setDefaultCloseOperation
метод и реализации слушатель окна, который обрабатывает окно близко, пытаются должным образом. Если Вы не хотите быть уведомленными, когда пользователь закрывает окно явно, то проигнорируйте полужирный код.
final JOptionPane optionPane = new JOptionPane( "The only way to close this dialog is by\n" + "pressing one of the following buttons.\n" + "Do you understand?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION); final JDialog dialog = new JDialog(frame, "Click a button", true); dialog.setContentPane(optionPane); dialog.setDefaultCloseOperation( JDialog.DO_NOTHING_ON_CLOSE); dialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { setLabel("Thwarted user attempt to close window."); } }); optionPane.addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { String prop = e.getPropertyName(); if (dialog.isVisible() && (e.getSource() == optionPane) && (prop.equals(JOptionPane.VALUE_PROPERTY))) { //If you were going to check something //before closing the window, you'd do //it here. dialog.setVisible(false); } } }); dialog.pack(); dialog.setVisible(true); int value = ((Integer)optionPane.getValue()).intValue(); if (value == JOptionPane.YES_OPTION) { setLabel("Good."); } else if (value == JOptionPane.NO_OPTION) { setLabel("Try using the window decorations " + "to close the non-auto-closing dialog. " + "You can't!"); }
Следующие таблицы приводят обычно используемый JOptionPane
и JDialog
конструкторы и методы. Другие методы, которые Вы, вероятно, вызовете, определяются Dialog
, Window
Component
pack
, setSize
, и setVisible
.
API перечисляется следующим образом:
JOptionPane
Методы класса)JOptionPane
s НепосредственноJDialog
Конструкторы и МетодыМетод или Конструктор | Цель |
---|---|
|
Создает a JOptionPane экземпляр. См. Создание и Показ Простых Диалоговых окон для обсуждения параметров и их эффектов. |
|
Удобный JOptionPane Методы class, которые находят фрейм или настольную область, соответственно, в котором находится указанный компонент. |
|
Определяет, где разрывы строки будут автоматически вставлены в текст области опции. (Значение по умолчанию Integer.MAX_VALUE .) Чтобы использовать этот метод, следует создать a JOptionPane подкласс. Например, следующий код приводит к области опции с одним словом на строку, вследствие того, что каждое слово в строке является 5 символами или меньше: JOptionPane op = new JOptionPane("This is the text.") { public int getMaxCharactersPerLineCount() { return 5; } }; |
Метод или Конструктор | Цель |
---|---|
|
Создает a JDialog экземпляр. Frame параметром, если таковые вообще имеются, является фрейм (обычно a JFrame объект), от которого зависит диалоговое окно. Приведите булев аргумент true определить модальное диалоговое окно, false или отсутствующий, чтобы определить немодальное диалоговое окно. Можно также определить title диалогового окна, используя строковый параметр. |
|
Получите и установите область контента, которая обычно является контейнером компонентов всего диалогового окна. См. Используя Высокоуровневые Контейнеры для получения дополнительной информации. |
|
Получите и установите то, что происходит, когда пользователь пытается закрыть диалоговое окно. Возможные значения: DISPOSE_ON_CLOSE , DO_NOTHING_ON_CLOSE , HIDE_ON_CLOSE (значение по умолчанию). См. Отвечающие Закрывающие окно События для получения дополнительной информации. |
|
Центрирует диалоговое окно по указанному компоненту. |
|
Набор или получает подсказку относительно того, должны ли художественные оформления окна диалогового окна (такие как границы, или виджеты, чтобы закрыть окно) быть обеспечены текущим стилем. Иначе художественные оформления диалогового окна будут обеспечены текущим менеджером окон. См. Определение Художественных оформлений Окна для получения дополнительной информации. |
Эта таблица приводит примеры то использование JOptionPane
или JDialog
. Чтобы найти другие примеры, которые используют диалоговые окна, см. списки в качестве примера для индикаторов выполнения, покрасьте селекторов, и селекторов файла.
Пример | Где Описано | Примечания |
---|---|---|
DialogDemo ,CustomDialog |
Этот раздел | Создает много видов диалоговых окон, используя JOptionPane и JDialog . |
Framework |
— | Переводит диалоговое окно подтверждения в рабочее состояние, когда пользователь выбирает пункт меню Quit. |
ListDialog |
Как Использовать BoxLayout | Реализует модальное диалоговое окно, содержащее список прокрутки и две кнопки. Не использует JOptionPane , за исключением служебного метода getFrameForComponent . |