如何阻止JOptionPane禁用根框架

时间:2015-04-25 04:03:17

标签: java swing jframe joptionpane modality

如何在不禁用任何当前打开的框架的情况下显示JOptionPane?

我有一个带有“开始”和“停止”按钮的JFrame。在任何时候,我希望用户能够按下主框架上的“停止”按钮,以停止辅助线程(由“开始”按钮启动)。

然而,第二个运行的线程有时会打开一个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 个答案:

答案 0 :(得分:2)

JOptionPanemodal,所以你不能直接这样做。

  

所有对话都是模态的。每个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);