2015-04-25 2 views
2

Как показать JOptionPane без отключения открытых в настоящий момент фреймов?Как остановить JOptionPane от выключения корневого фрейма

У меня есть JFrame с кнопкой Start и Stop. В любой момент я хочу, чтобы пользователь мог нажать кнопку «Стоп» на главном кадре, чтобы остановить вторичный поток (который был запущен кнопкой «Пуск»).

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

(И когда он открывает несколько из этих JOptionPanes подряд, он становится очень расстраивающим, пытаясь остановить его).

Я попытался

JOptionPane.showMessageDialog(null, "It's Broken Mate"); 

без успеха. Я также попытался передать его JFrame для отключения:

JOptionPane.showMessageDialog(new JFrame(), "Still No Go"); 

Это тоже не удалось. Я даже попытался

JFrame frame = new JFrame(); 
frame.setVisible(true); 
JOptionPane.showMessageDialog(frame, "CMON Please"); 

И даже более того,

JFrame frame = new JFrame(); 
frame.setVisible(true); 
JOptionPane.setRootFrame(frame); 
JOptionPane.showMessageDialog(frame, "I'm getting angry now."); 

и до сих пор. Ничего. Не работает. Он открывает окно сообщения, и все отключено. Я должен отклонить JOptionPane, прежде чем что-то снова станет разрешено ...

Любые идеи?

Приветствия

ответ

2

JOptionPane s являются modal, так что вы не можете сделать это непосредственно.

Все диалоги являются модальными. Каждый метод showXxxDialog блокирует вызывающего абонента до тех пор, пока взаимодействие пользователя не будет завершено.

Вам необходимо использовать JDialog или аналогичный.

JOptionPane p = new JOptionPane("I'm getting happy now."); 
    JDialog k = p.createDialog(":-)"); 
    k.setModal(false); // Makes the dialog not modal 
    k.setVisible(true); 
+0

Ах да! Это восхитительно. Спасибо огромное! :-) – Jamezo97

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