Java JOptionPane赢得';t在其他窗口顶部显示其对话框
我的swing提醒应用程序目前有问题,它能够最小化关闭时的托盘。我这里的问题是,我需要JOptionPane对话框根据我的设置及时弹出,但这里的问题是,当我最小化它时,对话框会弹出,但当其他应用程序如explorer、firefox运行时,对话框不会在窗口顶部弹出,有人知道无论运行什么应用程序,如何在windows上弹出对话框吗?windows从XP开始就阻止了此操作 以前的情况是这样的: 当你在编辑器中翻阅某些文本时,你没有意识到另一个对话框出现在你翻阅文本时。即将到来的对话框将获得焦点,您将在新对话框中进行提示。可能您在准备就绪后单击enter,并在错误的对话框中执行此操作,该对话框询问您是否确实要删除硬盘;) java中的前台调用仅适用于java windowsJava JOptionPane赢得';t在其他窗口顶部显示其对话框,java,swing,joptionpane,Java,Swing,Joptionpane,我的swing提醒应用程序目前有问题,它能够最小化关闭时的托盘。我这里的问题是,我需要JOptionPane对话框根据我的设置及时弹出,但这里的问题是,当我最小化它时,对话框会弹出,但当其他应用程序如explorer、firefox运行时,对话框不会在窗口顶部弹出,有人知道无论运行什么应用程序,如何在windows上弹出对话框吗?windows从XP开始就阻止了此操作 以前的情况是这样的: 当你在编辑器中翻阅某些文本时,你没有意识到另一个对话框出现在你翻阅文本时。即将到来的对话框将获得焦点,您将
通知用户新窗口的可能性是实现一个框架,该框架将在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时使任务栏中的东西闪烁