2

現在開いているフレームを無効にせずに JOptionPane を表示するにはどうすればよいですか?

開始ボタンと停止ボタンを備えた JFrame があります。いつでも、ユーザーがメイン フレームの [停止] ボタンを押して、セカンダリ スレッド ([開始] ボタンによって開始された) を停止できるようにしたいと考えています。

ただし、実行中の 2 番目のスレッドが 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を閉じる必要があります...

何か案は?

乾杯

4

1 に答える 1

2

JOptionPanes は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);
于 2015-04-25T04:06:21.170 に答える