【问题标题】:JOptionPane won't show its dialog on top of other windowsJOptionPane 不会在其他窗口的顶部显示其对话框
【发布时间】:2010-10-01 02:36:09
【问题描述】:

我的挥杆提醒应用程序目前有问题,它能够在关闭时最小化到托盘。我的问题是,我需要根据我设置的 JOptionPane 对话框按时弹出,但这里的问题是,当我将其最小化时,对话框会弹出,但不会在其他应用程序(如资源管理器、firefox)时弹出窗口顶部正在运行,有谁知道无论运行什么应用程序,如何在窗口顶部弹出对话框?

【问题讨论】:

    标签: java swing joptionpane


    【解决方案1】:

    旧帖子,但我正在为此苦苦挣扎。

    我的问题更多在于 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 中调用它以稍微清理您的代码。

    【讨论】:

      【解决方案2】:

      您可能会考虑改用 JFrame。它可能会给您更多的灵活性。

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

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

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

      【讨论】:

        【解决方案3】:

        更正上面的帖子..

        我的问题已解决如下:

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

        它对我来说很好:)

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            您正在使用其中一种罐装 JOptionPanes 吗? (如 JOptionPane.showCONfirmDialog(...))

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

            【讨论】:

              【解决方案6】:

              自 XP 以来,Windows 已阻止此操作。

              之前的场景是这样的: 您在编辑器中的某些文本中提示,当您提示文本时,您没有意识到另一个对话框即将出现。即将到来的对话框获得焦点,您正在新对话框中小费。也许你准备好后点击回车并在错误的对话框中执行此操作,询问你是否真的要删除你的硬盘;)

              java 中的 come to front call 仅适用于 java windows。

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

              【讨论】:

              • 在评论中展开,真的很好。使用扩展 JFrame 的东西而不是扩展 JDialog 的东西,以便在调用带到前面时在任务栏中得到闪烁的东西
              猜你喜欢
              • 1970-01-01
              • 2017-09-25
              • 1970-01-01
              • 1970-01-01
              • 2013-07-20
              • 2011-10-01
              • 2012-06-08
              • 2013-12-24
              • 1970-01-01
              相关资源
              最近更新 更多