int confirmDialog = JOptionPane.showConfirmDialog(null, "You selected quit! \nAre you sure you want to quit?", "Selected Quit", JOptionPane.YES_NO_OPTION);
if(confirmDialog == 0)
System.exit(0);
//focus under this comment here
if(confirmDialog == 1) {
game.reset();
displayBoard();
}
我用棋盘做了一场比赛。我有一个退出按钮退出游戏。当用户单击该按钮时,将使用上面的JOptionPane提示他们。它问他们是否确定要退出。我可以关闭游戏,但问题是当用户选择“否”时。 我希望用户能够点击“否”并拥有它以便游戏重置它所做的,我可以看到电路板重置。但是optionPane并没有消失,我希望OptionPane能够消失,以便他们可以玩。
答案 0 :(得分:4)
由于您的确认对话框有两种可能的结果,您可以编写一个简单的if-else
块,如下所示:
int confirmDialog = JOptionPane.showConfirmDialog(null, "You selected quit! \nAre you sure you want to quit?", "Selected Quit", JOptionPane.YES_NO_OPTION);
if(confirmDialog == JOptionPane.YES_OPTION) {
System.exit(0);
//focus under this comment here
} else {
game.reset();
displayBoard();
}
请注意,使用静态字段JOptionPane.YES_OPTION可以使代码更加健壮。
我可以看到电路板重置。但是optionPane并没有消失 我希望OptionPane能够消失,以便他们可以玩。
检查game.reset()
中的某些内容是否阻止Event Dispatch Thread(a.k.a. EDT)。 EDT是一个单独的特殊线程,可以在其中创建和更新Swing组件。如果有一些耗时的任务阻止EDT,您的GUI可能会无响应。在Concurrency in Swing trail中查看更多内容。
关于这一行:
System.exit(0);
此方法终止当前运行的JVM,如System.exit(int status) javadoc中所述。这实际上是一种不好的做法。在使用Swing时,您应该在JFrame
上调用dispose(),如果没有待处理的线程工作,则应该终止JVM。