我有一个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");
}
答案 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]);
我发现上述陈述有很多问题:
为什么要使用该构造函数?为什么要传递这么多空参数?正如我在前面的评论中提到的那样,可以使用更简单的构造函数。
为什么要在“消息类型”之前指定“选项类型”。您读过API吗?您能告诉我一个构造函数在哪里有效吗?
3。您为什么使用JOptionPane.ERROR_MESSAGE
?这是个问题吗?您不应该使用JOptionPane.QUESTION_MESSAGE
吗?
您是否按照我的建议阅读了API?如果您不阅读API并了解不同的构造函数和方法,则无法编程。
它返回一个整数,但是在这种情况下,我在哪里可以看到它?
它可能会或可能不会返回整数,具体取决于关闭对话框的方式。如果单击一个按钮,它将是一个整数。如果计时器触发,它将是一个字符串。
再次,您是否从Direct Use
的API中阅读了该部分?它显示了如何获取从选项窗格返回的值并检查其值。
所以我再次问,您读过API吗?您不了解API中提供的代码方面的某些内容。如果是这样,请提出一个具体问题。