Java JOptionPane赢得';t在其他窗口顶部显示其对话框

Java JOptionPane赢得';t在其他窗口顶部显示其对话框,java,swing,joptionpane,Java,Swing,Joptionpane,我的swing提醒应用程序目前有问题,它能够最小化关闭时的托盘。我这里的问题是,我需要JOptionPane对话框根据我的设置及时弹出,但这里的问题是,当我最小化它时,对话框会弹出,但当其他应用程序如explorer、firefox运行时,对话框不会在窗口顶部弹出,有人知道无论运行什么应用程序,如何在windows上弹出对话框吗?windows从XP开始就阻止了此操作 以前的情况是这样的: 当你在编辑器中翻阅某些文本时,你没有意识到另一个对话框出现在你翻阅文本时。即将到来的对话框将获得焦点,您将

我的swing提醒应用程序目前有问题,它能够最小化关闭时的托盘。我这里的问题是,我需要JOptionPane对话框根据我的设置及时弹出,但这里的问题是,当我最小化它时,对话框会弹出,但当其他应用程序如explorer、firefox运行时,对话框不会在窗口顶部弹出,有人知道无论运行什么应用程序,如何在windows上弹出对话框吗?

windows从XP开始就阻止了此操作

以前的情况是这样的: 当你在编辑器中翻阅某些文本时,你没有意识到另一个对话框出现在你翻阅文本时。即将到来的对话框将获得焦点,您将在新对话框中进行提示。可能您在准备就绪后单击enter,并在错误的对话框中执行此操作,该对话框询问您是否确实要删除硬盘;)

java中的前台调用仅适用于java windows


通知用户新窗口的可能性是实现一个框架,该框架将在windows任务栏中突出显示/闪烁。

您可能会考虑使用JFrame。它可能会给你多一点灵活性

如果您正在使用JFrame,并且希望它在其他窗口上弹出,请使用:

myFrame.setVisible(true);
myFrame.setState(Frame.NORMAL);

如果之前窗口处于最小化状态,设置状态将向用户显示该窗口。

您使用的是一个固定作业窗格吗?(如JOptionPane.showCOnfirmDialog(…))


您可能希望扩展JDialog并创建自己的对话框面板,然后调用myDialog.setAlwaysOnTop(true)

更正上面的帖子

我已按以下方式解决我的问题:

this.setVisible(true); // show main frame
MyDialog dialog = New MyDialog(this, true); // show my custom dialog
dialog.setVisible(true);
this.setVisible(false);

它对我来说很好:)

创建一个空的JFrame,将其始终设置在顶部,并将其用作JOptionPane的组件,而不是null。因此JOptionPane始终位于应用程序的所有其他窗口之上。您还可以通过虚拟JFrame的位置来确定JOptionPane在屏幕上的显示位置

JFrame frmOpt;  //dummy JFrame

private void question() {
    if (frmOpt == null) {
        frmOpt = new JFrame();
    }
    frmOpt.setVisible(true);
    frmOpt.setLocation(100, 100);
    frmOpt.setAlwaysOnTop(true);
    String[] options = {"delete", "hide", "break"};
    int response = JOptionPane.showOptionDialog(frmOpt, msg, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, "delete");
    if (response == JOptionPane.YES_OPTION) {
        removeRow();
    }
    frmOpt.dispose();
}

这是一篇老文章,但我一直在努力

我的问题更多的是Javafx允许JOptionPane在当前Java窗口后面运行

因此,我使用了以下方法,将JOptionPane放在所有窗口的前面,实现了原始海报的要求;甚至JAVAFX

首先是旧的JOptionPane:

JOptionPane.showMessageDialog(null, "Here I am");
现在,一个JOptionPane将保持在前面:

final JDialog dialog = new JDialog();
dialog.setAlwaysOnTop(true);    
JOptionPane.showMessageDialog(dialog, "Here I am");
为了好玩,这里所有的东西都排在一条长队上:

JOptionPane.showMessageDialog(
                 ((Supplier<JDialog>) () -> {final JDialog dialog = new JDialog(); dialog.setAlwaysOnTop(true); return dialog;}).get()
                 , "Here I am");
JOptionPane.showMessageDialog(
((供应商)(->{final JDialog dialog=new JDialog();dialog.setAlwaysOnTop(true);return dialog;}).get()
“我在这里”);

您可以创建一个静态方法,在其中为您返回JDialog,然后在JOptionPane中调用它来稍微清理代码。

在注释中展开,这非常好。使用扩展JFrame的东西,而不是扩展JDialog的东西,以便在调用bring to front时使任务栏中的东西闪烁