如果java中未按下按钮,请在5秒钟后关闭ShowOption对话框
我有一个ShowOption对话框,询问用户是否要删除某些内容。我想关闭帧,如果5秒钟后没有按下任何按钮,则不删除。我怎样才能做到这一点 这是我的密码:如果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
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();
...
编辑:
我把它改为:
我可以看出上述说法存在很多问题:
作业窗格。问题\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]);