Java 如何防止JFrame在关闭JOptionPane后变为顶部?

Java 如何防止JFrame在关闭JOptionPane后变为顶部?,java,swing,joptionpane,Java,Swing,Joptionpane,我正在web浏览器上自动执行某些操作。完成一系列操作后,将弹出一个JOptionPane,询问用户是否要继续 单击“是”后,我的主框架会在我的web浏览器上弹出,这会破坏我的工作流程 我可以让浏览器移到主框架的前面,但是我想知道,在JOptionPane对话框中选择一个选项后,是否可以防止主框架弹出?我在JOptionPane上找不到任何选项,所以我开始研究使用另一个JFrame重新实现它有多容易。我决定禁用主框架,稍后再启用它(看起来这是JOptionPane内部的工作),在我重新实现JOpt

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

单击“是”后,我的主框架会在我的web浏览器上弹出,这会破坏我的工作流程


我可以让浏览器移到主框架的前面,但是我想知道,在
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);
}
然而,我不确定这是否能在所有平台上运行。这对你有帮助吗


如果不是,我建议替换
JOptionPane.showMessageDialog(框架,“hello”)JFrame
进行编码,这样您就可以完全控制它了。您必须添加
WindowListener
,以便在主框架关闭时启用它。但是,您将失去阻止功能-这可能比它的价值更难实现。

我在
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);
}
然而,我不确定这是否能在所有平台上运行。这对你有帮助吗


如果不是,我建议替换
JOptionPane.showMessageDialog(框架,“hello”)JFrame
进行编码,这样您就可以完全控制它了。您必须添加
WindowListener
,以便在主框架关闭时启用它。但是,您将失去阻止功能-这可能比它的价值更难实现。

通常,您指定JFrame作为JOptionPane的父窗口。尝试对父窗口使用“null”,然后希望JOptionPane能够独立于JFrame工作。@camickr我一直在使用“null”,不幸的是,它没有帮助。通常,您指定一个JFrame作为JOptionPane的父窗口。尝试对父对象使用“null”,然后希望JOptionPane能够独立于JFrame工作。@camickr我一直使用“null”,不幸的是,它没有帮助。