Как остановить 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, прежде чем что-либо снова станет активным...

Есть идеи?

ура

1 ответ

Решение

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

Все диалоги являются модальными. Каждый метод 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);
Другие вопросы по тегам