如果未在Java中按下按钮,则在5秒钟后关闭showOptionDialog

时间:2018-10-03 15:17:51

标签: java jframe joptionpane

我有一个showOptionDialog,询问用户是否要删除某些内容。如果5秒钟后仍未按下任何按钮,则我想关闭边框而不删除。我该如何实现?

这是我的代码:

         JFrame frame = new JFrame();
         frame.setAlwaysOnTop(true);
         Object[] options = {"OK"};
         int n = JOptionPane.showOptionDialog(frame,"Do you want to delete?","Title",JOptionPane.PLAIN_MESSAGE,JOptionPane.QUESTION_MESSAGE,null,options,options[0]);
         if (JOptionPane.OK_OPTION == n) {
             System.out.println("Delete");
         } else {
             System.out.println("Not Delete");
         }

1 个答案:

答案 0 :(得分:1)

阅读JOptionPane API。 JOptionPane的"Direct Use"上有一节。

您将需要手动创建选项窗格和对话框。当您执行此操作时,现在将获得对选项窗格使用的对话框的引用,这意味着可以在对话框仍处于打开状态的情况下对其进行dispose()。

因此,您还需要创建一个Swing Timer。计时器触发时,您使用dialog.dispose()

您需要在显示对话框之前启动计时器。

此外,在您检查选项窗格的返回值之前,您希望停止计时器,因为您不希望在选项窗格已关闭时触发计时器。

因此(从API中提取)基本逻辑是:

 JOptionPane pane = new JOptionPane(arguments);
 pane.set.Xxxx(...); // Configure
 JDialog dialog = pane.createDialog(parentComponent, title);

 Timer timer = new Timer(5000, (e) -> dialog.dispose());
 timer.start();

 dialog.setVisible(true);
 timer.stop();
 ...

编辑:

  

我将其更改为:

JOptionPane pane = new JOptionPane(
    "Do you want to delete?",
    JOptionPane.OK_CANCEL_OPTION,
    JOptionPane.ERROR_MESSAGE,
    null,
    options,
    options[0]); 

我发现上述陈述有很多问题:

  1. 为什么要使用该构造函数?为什么要传递这么多空参数?正如我在前面的评论中提到的那样,可以使用更简单的构造函数。

  2. 为什么要在“消息类型”之前指定“选项类型”。您读过API吗?您能告诉我一个构造函数在哪里有效吗?

3。您为什么使用JOptionPane.ERROR_MESSAGE?这是个问题吗?您不应该使用JOptionPane.QUESTION_MESSAGE吗?

您是否按照我的建议阅读了API?如果您不阅读API并了解不同的构造函数和方法,则无法编程。

  

它返回一个整数,但是在这种情况下,我在哪里可以看到它?

它可能会或可能不会返回整数,具体取决于关闭对话框的方式。如果单击一个按钮,它将是一个整数。如果计时器触发,它将是一个字符串。

再次,您是否从Direct Use的API中阅读了该部分?它显示了如何获取从选项窗格返回的值并检查其值。

所以我再次问,您读过API吗?您不了解API中提供的代码方面的某些内容。如果是这样,请提出一个具体问题。