2013-11-11 5 views
1

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

int reply = JOptionPane.showConfirmDialog(
    null, 
    "Is the weather beautifull?", 
    "Question", 
    JOptionPane.YES_NO_OPTION 
); 
if (reply == JOptionPane.YES_OPTION) { 
    // do something in response to yes... 
} else { 
    // do something in response to no... 
} 

Так что я точно хочу, что я создаю мой собственный объект сообщения, показать его и реагировать на нажатие кнопки делается пользователем в псевдокоде следующим образом:

show my question message; 
wait for user button press without blocking UI thread; 
do something depending on which button the user pressed; 

Я пытался serverall вещи, чтобы иметь мое окно сообщений действует как JOptionPane с Futures, Wait/Notify и т. Д., Но я всегда оказывался в блокировке моей пользовательской нити.

Что такое секрет JOptionPane? :)

ответ

2

Смотрите docs:

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

См modal window:

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

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

+0

Благодарим вас за ответ. Я понимаю, что JoptionPan как диалог блокирует все другие пользовательские ввода, но как это делается, что поток ждет ответа? Или лучше спросить, как я могу заставить мой поток ждать результата без блокировки нити ui? – alex

+0

Хорошо, я решил это, вот пример кода для моего решения: http://open-sourced.de/show_article.php?articleid=61 – alex

Смежные вопросы