当前位置:  开发笔记 > 编程语言 > 正文

JOptionPane不会在其他窗口的顶部显示其对话框

如何解决《JOptionPane不会在其他窗口的顶部显示其对话框》经验,为你挑选了2个好方法。

我目前有摆动提醒应用程序的问题,它可以最小化到托盘关闭.我的问题是,我需要按照我设置的方式按时弹出JOptionPane对话框,但问题是,当我最小化它时,对话框会弹出,但不会出现在windows的顶部,当其他应用程序如explorer,firefox正在运行,任何人都知道如何在Windows上弹出对话框,无论运行什么应用程序?



1> 小智..:

创建一个空的相应虚拟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();
}



2> 小智..:

老帖子,但我正在努力解决这个问题.

我的问题更多的是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) () -> {final JDialog dialog = new JDialog(); dialog.setAlwaysOnTop(true); return dialog;}).get()
                 , "Here I am");

你可以在一些静态方法中为你返回JDialog,然后在JOptionPane中调用它来清理你的代码.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有