关闭 JOptionPane 后如何防止 JFrame 出现在顶部?

How to prevent JFrame from coming to top after closing JOptionPane?

我正在网络浏览器上自动执行某些操作。完成一些操作后,会弹出 JOptionPane 询问用户是否要继续。

单击 'Yes' 后,我的主框架会在我的网络浏览器上弹出,这破坏了我的工作流程。

我可以让浏览器移动到主框架的前面,但我想知道是否可以在JOptionPane对话框中选择一个选项后阻止主框架弹出?

我在 JOptionPane 上找不到任何选项,所以我开始研究使用另一个 JFrame 重新实现它是否容易。我决定禁用主框架,稍后再启用它(这似乎是 JOptionPane 内部所做的),在我重新实现 JOptionPane 之前,我注意到它解决了问题:

public static void main(String[] args) {
    final JFrame frame = new JFrame();

    JButton button = new JButton("hello");
    button.addActionListener(e -> {
        frame.setEnabled(false); // disable main frame
        JOptionPane.showMessageDialog(frame, "hello");
        frame.setEnabled(true); // enable main frame
    });
    frame.setContentPane(button);

    frame.setVisible(true);
    frame.setSize(600, 480);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}

但是我不确定这是否适用于所有平台。对你有帮助吗?

如果没有,我建议用您自己的 JFrame 替换 JOptionPane.showMessageDialog(frame, "hello");,这样您就可以完全控制它。您必须添加 WindowListener 才能在主框架关闭时启用它。然而,您将失去一个阻塞功能——这可能比它值得的更难实现。