关闭 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
才能在主框架关闭时启用它。然而,您将失去一个阻塞功能——这可能比它值得的更难实现。
我正在网络浏览器上自动执行某些操作。完成一些操作后,会弹出 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
才能在主框架关闭时启用它。然而,您将失去一个阻塞功能——这可能比它值得的更难实现。