Могу ли я использовать Java JOptionPane немодальным способом? - PullRequest
12 голосов
/ 18 апреля 2011

Я работаю над приложением, которое открывает окно JOptionPane при выполнении определенного действия.Мне было просто интересно, если это возможно, что когда JOptionPane действительно всплывает, как вы все еще можете использовать фоновые приложения.В настоящее время, когда появляется окно JOptionPane, я не могу ничего сделать, пока не закрою JOptionPane.

EDIT

Спасибо за ответ, ребята, и за информацию.Подумайте, не стоит оставлять эту функцию вне приложения, потому что похоже, что это может быть более хлопотно, чем необходимо.

Ответы [ 4 ]

8 голосов
/ 18 апреля 2011

В документации прямо говорится, что все диалоги являются модальными при создании с помощью методов showXXXDialog.

Вы можете использовать метод прямого использования, взятый из документов, и метод setModal , который JDialog наследует от Dialog:

 JOptionPane pane = new JOptionPane(arguments);
 // Configure via set methods
 JDialog dialog = pane.createDialog(parentComponent, title);
 // the line below is added to the example from the docs
 dialog.setModal(false); // this says not to block background components
 dialog.show();
 Object selectedValue = pane.getValue();
 if(selectedValue == null)
   return CLOSED_OPTION;
 //If there is not an array of option buttons:
 if(options == null) {
   if(selectedValue instanceof Integer)
      return ((Integer)selectedValue).intValue();
   return CLOSED_OPTION;
 }
 //If there is an array of option buttons:
 for(int counter = 0, maxCounter = options.length;
    counter < maxCounter; counter++) {
    if(options[counter].equals(selectedValue))
    return counter;
 }
 return CLOSED_OPTION;
2 голосов
/ 18 апреля 2011

Вы можете получить больше информации здесь: http://download.oracle.com/javase/tutorial/uiswing/components/dialog.html

Диалог может быть модальным.Когда модальный диалог виден, он блокирует пользовательский ввод для всех других окон в программе.JOptionPane создает JDialogs, которые являются модальными.Чтобы создать немодальный диалог, вы должны напрямую использовать класс JDialog.

Начиная с JDK6, вы можете изменять поведение модальности окна диалога, используя новый API Modality .Подробности смотрите в API нового модальности.

1 голос
/ 16 июля 2014

Этот легкий твик сработал у меня (1.6+). Заменили showXXXDialog четырьмя строками кода на: (1) создать объект JOptionPane (2) вызвать его метод createDialog (), чтобы получить объект JDialog (3) установить тип модальности объекта JDialog на немодальный (4) установите видимость JDialog в true.

1 голос
/ 18 апреля 2011

В вашем Java-приложении вам не повезло: я не проверял, но я думаю, что методы showXXXDialog в JOptionPane вызывают так называемое модальное диалоговое окно, в котором остальная часть графического интерфейса пользователя не активна из той же JVM .

Однако у Java нет никаких сверхспособностей для захвата переднего плана: вы все равно должны иметь возможность Alt-Tab для других (не Java) приложений.

...