【问题标题】:How to implement "Saving..." dialog box in Java?如何在 Java 中实现“正在保存...”对话框?
【发布时间】:2009-11-02 06:27:42
【问题描述】:

我想弹出一个对话框,上面写着“正在保存...”,一旦操作完成,它就会消失。在保存过程中,我不希望用户能够做任何事情。我也不想要确定按钮。

允许我这样做的 Java 类的名称是什么?

【问题讨论】:

    标签: java swing dialog


    【解决方案1】:

    我认为 JDialog 是您想要的 - 请务必在其上调用 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE),因为与 JFrame 不同,它的默认行为是 HIDE_ON_CLOSE

    【讨论】:

      【解决方案2】:

      这是我发现的最终代码,大致模拟了我想要做的事情:

      // Create dialog box
      JDialog dialog = new JDialog(new JFrame(), "Saving...");
      
      // IMPORTANT: setLocationRelativeTo(null) is called AFTER you setSize()
      // otherwise, your dialog box will not be at the center of the screen!
      dialog.setSize(200,200);
      dialog.setLocationRelativeTo(null);
      dialog.toFront(); // raise above other java windows
      dialog.setVisible(true);
      
      // Sleep for 2 seconds
      try
      {
        Thread.sleep(2000);
      } catch (InterruptedException ex)
      {
        Logger.getLogger(JavaDialogBox.class.getName()).log(Level.SEVERE, null, ex);
      }
      
      // Then "close" the dialog box
      dialog.dispose();
      

      最后,发现这 3 个链接在编写上述代码时非常有用:

      【讨论】:

        【解决方案3】:

        您也可以考虑在对话框中使用javax.swing.JProgressBar,以便显示正在发生的进度。如果您在保存过程中有足够的信息给出完成百分比,则可以显示,如果没有,则可以将其显示为不确定(来回移动直到完成)。然后在保存过程完成后处理对话框——与在固定时间内显示静态文本消息相比,这将是很好的用户体验增强。这是一个带有演示 Java 代码的教程,其中显示了一个示例对话框:http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html

        【讨论】:

          【解决方案4】:

          我认为您可能想要的是modal JDialog。它们使阻止整个应用程序的用户交互变得相当容易,并且您有一些额外的控制权。

          如果您的保存操作时间超过 2 秒,您发布的代码 sn-p 可能会出现问题。我建议在您当前拥有 Thread.sleep() 的地方调用您的 save() 函数。这样,您就知道无论保存多长时间,UI 都会被阻止。

          【讨论】:

          • 谢谢..对于那个例子,我只是想作为一个例子,但感谢您的详尽。
          猜你喜欢
          • 1970-01-01
          • 2018-12-07
          • 1970-01-01
          • 2010-10-27
          • 1970-01-01
          • 1970-01-01
          • 2016-01-08
          • 2020-09-05
          • 1970-01-01
          相关资源
          最近更新 更多