如何在所有窗口的顶部显示 JOptionPane

2022-09-02 19:40:01

我创建了一个DialogUtil,它显示了不同情况下JOptionPan的数量。有时在我的操作类调用此方法时,使用空参数如下所示。

DialogUtil.showNotExist(null,xml.getName().concat(" is null or"));

在这种情况下,JOptionPane 不会出现在窗口顶部。

如何向 JOptionPane 添加一些内容以始终显示在顶部?

public static void showNotExist(JPanel panel, String action) {
    JOptionPane.showMessageDialog(panel, new JLabel(action.concat(" doesn't exist."), 2));
}

答案 1

您可以使用以下代码将 JOptionPane 始终设置为顶部:-

JFrame jf=new JFrame();
jf.setAlwaysOnTop(true);
int response = JOptionPane.showConfirmDialog(jf,"Message", "Title", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);

答案 2

你试过这样的东西吗?

JOptionPane optionPane = new JOptionPane();
JDialog dialog = optionPane.createDialog("Title");
dialog.setAlwaysOnTop(alwaysOnTop);
dialog.setVisible(true);

不能保证操作系统将允许您的对话始终位于顶部,但它通常会起作用。

如果您有一个现有的窗口或对话框,并且想要将其置于顶部,但又不想永久设置 alwaysOnTop,那么这应该有效,同时保留 alwaysOnTop 的旧值:

boolean supported = window.isAlwaysOnTopSupported();
boolean old_alwaysOnTop = window.isAlwaysOnTop();
if (supported) {
  window.setAlwaysOnTop(true);
}
window.toFront();
window.requestFocus();
if (supported) {
  window.setAlwaysOnTop(old_alwaysOnTop);
}

仅在 SwingThread 上运行该代码。


推荐