【发布时间】:2010-10-01 02:36:09
【问题描述】:
我的挥杆提醒应用程序目前有问题,它能够在关闭时最小化到托盘。我的问题是,我需要根据我设置的 JOptionPane 对话框按时弹出,但这里的问题是,当我将其最小化时,对话框会弹出,但不会在其他应用程序(如资源管理器、firefox)时弹出窗口顶部正在运行,有谁知道无论运行什么应用程序,如何在窗口顶部弹出对话框?
【问题讨论】:
标签: java swing joptionpane
我的挥杆提醒应用程序目前有问题,它能够在关闭时最小化到托盘。我的问题是,我需要根据我设置的 JOptionPane 对话框按时弹出,但这里的问题是,当我将其最小化时,对话框会弹出,但不会在其他应用程序(如资源管理器、firefox)时弹出窗口顶部正在运行,有谁知道无论运行什么应用程序,如何在窗口顶部弹出对话框?
【问题讨论】:
标签: java swing joptionpane
旧帖子,但我正在为此苦苦挣扎。
我的问题更多在于 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 中调用它以稍微清理您的代码。
【讨论】:
您可能会考虑改用 JFrame。它可能会给您更多的灵活性。
如果您使用的是 JFrame,并且希望它在其他窗口上方弹出,请使用:
myFrame.setVisible(true);
myFrame.setState(Frame.NORMAL);
如果之前处于最小化状态,setState 将向用户显示窗口。
【讨论】:
更正上面的帖子..
我的问题已解决如下:
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();
}
【讨论】:
您正在使用其中一种罐装 JOptionPanes 吗? (如 JOptionPane.showCONfirmDialog(...))
您可能希望查看扩展 JDialog 并制作自己的对话框面板,然后调用 myDialog.setAlwaysOnTop(true);
【讨论】:
自 XP 以来,Windows 已阻止此操作。
之前的场景是这样的: 您在编辑器中的某些文本中提示,当您提示文本时,您没有意识到另一个对话框即将出现。即将到来的对话框获得焦点,您正在新对话框中小费。也许你准备好后点击回车并在错误的对话框中执行此操作,询问你是否真的要删除你的硬盘;)
java 中的 come to front call 仅适用于 java windows。
通知用户新窗口的可能性是实现一个框架,它将在窗口任务栏中突出显示/闪烁。
【讨论】: