Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果java中未按下按钮,请在5秒钟后关闭ShowOption对话框_Java_Jframe_Joptionpane - Fatal编程技术网

如果java中未按下按钮,请在5秒钟后关闭ShowOption对话框

如果java中未按下按钮,请在5秒钟后关闭ShowOption对话框,java,jframe,joptionpane,Java,Jframe,Joptionpane,我有一个ShowOption对话框,询问用户是否要删除某些内容。我想关闭帧,如果5秒钟后没有按下任何按钮,则不删除。我怎样才能做到这一点 这是我的密码: JFrame frame = new JFrame(); frame.setAlwaysOnTop(true); Object[] options = {"OK"}; int n = JOptionPane.showOptionDialog(frame,"Do you wa

我有一个ShowOption对话框,询问用户是否要删除某些内容。我想关闭帧,如果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");
         }

阅读
作业窗格API
。JOptionPane中有一个关于“直接使用”的章节

您需要手动创建选项窗格和对话框。执行此操作时,您现在将有一个对选项窗格使用的对话框的引用,这意味着您可以在对话框仍处于打开状态时释放()该对话框

因此,您还需要创建一个。当计时器启动时,您可以使用
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();
 ...
编辑:

我把它改为:

我可以看出上述说法存在很多问题:

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

  • 为什么在“消息类型”之前指定“选项类型”。你看过API了吗?你能告诉我一个构造函数在哪里有效吗

  • 三,。为什么要使用作业窗格。错误消息?这是一个问题?您是否应该不使用
    作业窗格。问题\u消息

    你有没有像我建议的那样读API?如果不阅读API,不了解不同的构造函数和方法,就无法编程

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

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

    同样,您是否阅读了API中有关直接使用的部分?它向您展示了如何获取从选项窗格返回的值并检查其值


    所以我再一次问,你读过API吗?API中的代码是否有您不理解的地方。如果是这样,请提出一个具体的问题。

    大致:使用其构造函数之一创建一个
    作业窗格
    ,创建其对话框,启动一个对话框,并在给定时间后关闭该对话框;并显示对话框。您可以使用。不要使用线程或ScheduledExecutorService。Swing组件应该在
    事件调度线程(EDT)
    上更新。因此,您应该使用Swing计时器来安排事件。
    JOptionPane.showOptionDialog在用户关闭它之前不会返回。此外,它不会给您任何对话框本身的引用。换句话说,恐怕这不能通过JOptionPane实现。您必须创建自己的窗口。@RobertKock当然可以,只是不能使用
    show…
    方法使用
    timer.setRepeats(false)?但总比老裸体好Thread@CarlosHeuberger,在对话框.show()之后的
    timer.stop()
    设计用于停止计时器,无论用户关闭选项窗格还是计时器处理选项窗格。如果用户关闭选项窗格,然后计时器再次尝试关闭,我不知道是否有问题。为了安全起见,我想这两种情况都可以处理。对不起,我不知道该怎么说。我尝试了框架“是否要删除?”,“标题”,JOptionPane。普通消息,JOptionPane。问题消息,null,选项,选项[0],但它没有work@danielgon,我不知道“不工作”是什么意思。是不是很复杂?对话框是否显示?在任何情况下:
    请阅读JOptionPane API
    。首先,验证手动创建选项窗格和对话框的基本概念。那么,为什么不从最简单的构造函数开始,它只是一条消息?让它工作,然后尝试其他构造函数。学习一个新概念时,一步一个脚印。如果你需要更多的帮助,那么发布一篇文章来说明问题。所以你只需要一个带按钮的JFrame。单击该按钮时,将手动显示选项窗格。一旦工作正常,就可以为计时器添加逻辑。一旦成功,您就可以将解决方案应用到实际应用程序中。
    JOptionPane pane = new JOptionPane(
        "Do you want to delete?",
        JOptionPane.OK_CANCEL_OPTION,
        JOptionPane.ERROR_MESSAGE,
        null,
        options,
        options[0]);