我的挥杆提醒应用程序目前有问题,它能够在关闭时最小化到托盘。我的问题是,我需要根据我设置的 JOptionPane 对话框按时弹出,但这里的问题是,当我将其最小化时,对话框会弹出,但不会在其他应用程序(如资源管理器、firefox)时弹出窗口顶部正在运行,任何人都知道如何在窗口顶部弹出对话框,无论正在运行什么应用程序?
6 回答
创建一个分别为空的虚拟 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");
您可以在某个地方创建一个静态方法,该方法将为您返回 JDialog,然后在 JOptionPane 中调用它以稍微清理您的代码。
您正在使用其中一种罐装 JOptionPanes 吗?(如 JOptionPane.showCONfirmDialog(...))
您可能想查看扩展 JDialog 并制作自己的对话框面板,然后调用 myDialog.setAlwaysOnTop(true);
自 XP 以来,Windows 已阻止此操作。
之前的场景是这样的:您在编辑器中输入了一些文本,但在您提示文本时没有意识到另一个对话框正在出现。即将到来的对话框获得焦点,您正在新对话框中小费。也许您在准备好后单击回车并在错误的对话框中执行此操作,该对话框询问您是否真的要删除硬盘;)
Java 中的前台调用仅适用于 Java 窗口。
通知用户新窗口的可能性是实现一个框架,它将在窗口任务栏中突出显示/闪烁。
更正上面的帖子..
我已经解决了我的问题如下:
this.setVisible(true); // show main frame
MyDialog dialog = New MyDialog(this, true); // show my custom dialog
dialog.setVisible(true);
this.setVisible(false);
这对我来说可以 :)
您可能会考虑改用 JFrame。它可能会给你更多的灵活性。
如果您使用的是 JFrame,并且希望它在其他窗口之上弹出,请使用:
myFrame.setVisible(true);
myFrame.setState(Frame.NORMAL);
如果之前处于最小化状态,setState 将向用户显示窗口。