【问题标题】:How to stop JOptionPane from disabling root frame如何阻止 JOptionPane 禁用根框架
【发布时间】:2015-07-03 20:20:09
【问题描述】:

如何在不禁用任何当前打开的框架的情况下显示 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...

有什么想法吗?

干杯

【问题讨论】:

    标签: java swing jframe joptionpane modality


    【解决方案1】:

    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);
    

    【讨论】:

    • 啊,是的!棒极了。太感谢了! :-)
    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2017-10-09
    相关资源
    最近更新 更多