如何在Java中实现“Saving ...”对话框?

时间:2009-11-02 06:27:42

标签: java swing dialog

我想弹出一个显示“正在保存...”的对话框,一旦操作完成,它就会消失。保存正在进行中,我不希望用户能够做任何事情。我也不想要一个OK按钮。

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

// 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个链接非常有用:

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我认为您可能想要的是modal JDialog。它们可以很容易地阻止整个应用程序的用户交互,并且您可以进行一些额外的控制。

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