2016-07-12 4 views
1

У меня есть сообщение, которое я хочу отобразить с некоторой информацией в модельном JDialog. Родительский класс вызовет метод dispose, чтобы закрыть его в правой точке. Вот код, у меня есть:JDialog Modality Behavior

private static void waitMessage() { 
    JOptionPane msg=new JOptionPane("Trying to get probes. Please wait ...", 
      JOptionPane.INFORMATION_MESSAGE,JOptionPane.DEFAULT_OPTION, 
      null,new Object[]{},null); 
    waitDialog=msg.createDialog("Probe Scan"); 
    waitDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
    waitDialog.setModalityType(ModalityType.MODELESS); 
    waitDialog.setSize(300,100); 
    waitDialog.setVisible(true); 
} 

Проблема заключается в том, что, когда я поставил ModalityType.DOCUMENT_MODAL на сообщение отображается, как ожидалось. Конечно, блоки JDialog, которые мне не нужны.

Correct Pane

Однако, когда я установил ModalityType.MODELESS, я получаю это:

Incorrect Pane

JDialog не блокирует, но текст сообщения не отображается. Может ли кто-нибудь объяснить, почему ModalityType рушит область? ТИА.

+0

Я не вижу этой проблемы в моем env – SomeDude

+0

Просто интересно: Правильно ли она отображается при изменении размера диалогового окна? – Marco13

+0

№ Изменение размера не имеет значения. –

ответ

1

Вручную добавив JOptionPane в качестве контента для JDialog, не подходит мне.

JOptionPane имеет method предназначеный для создания соответствующего JDialog экземпляра, поэтому лучше попробовать, что:

waitDialog = msg.createDialog("Probe Scan"); 
+0

Я взял этот метод из поиска, который я сделал. Я попробую. Благодарю. –

+0

Изучив это больше, я думаю, что это не будет делать то, что мне нужно. Я не вижу, как создать это, чтобы пользователь не мог его закрыть. Не существует метода SetDefaultCloseOperation. Я также не вижу, как закрыть его программным путем либо, как кажется, у него нет метода «dispose». Я что-то упускаю? –

+0

Созданный диалог имеет те же методы, что и любой другой JDialog, вы можете вызвать их так же, как и в вашем примере, включая setDefraultCloseOperation. – Berger

0

Причина вы не можете закрыть диалоговое окно программно является то, что вы не держите ссылку на диалог. Один из способов сделать это - вернуть метод waitMessage() экземпляр waitDialog. Или вы можете сделать то, что предлагает @Berger.

Кроме того,

waitDialog.setSize(300,100); 
waitDialog.setVisible(true); 
waitDialog.pack(); 

Почему называют SetSize(), а также пакет()? Решите, хотите ли вы его размер, или хотите, чтобы он выглядел как его предпочтительный размер? И вы должны вызвать setVisible() ПОСЛЕ вызова setSize или pack.

Метод «SetDefaultCloseOperation» отсутствует.

Но есть метод setDefaultCloseOperation. (обратите внимание на нижний регистр первой буквы)

+0

Я думаю, что я нахожусь на причине проблемы. Когда родитель этого метода создает JOptionPane с кнопкой OK, эта панель затем изменяется и отображается правильно. Разве это не означает, что у меня есть какой-то вопрос времени, когда немогу? –