我正在使用Swing的ProgressMonitor。
这为我生成了一个很好的对话框:
老实说,我认为ProgressMonitor
的设计有一个缺陷:如果用户通过按红/白十字关闭对话框,您认为会发生什么?是的,你猜对了:它只是关闭/隐藏对话框,当然你在后台做的任何工作都会继续。没有办法让对话框回来,afaik。
关闭窗口应该意味着“取消”或者根本不允许,因为我需要用户等待任务完成或取消它。我如何实现这一目标?
如果我可以获得对该JDialog的引用,那么我可以这样做:
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
但我无法得到那个参考。
更新和最终答案
所以,我没有告诉你完整的故事。事实上,我使用的是ProgressMonitorInputStream,其中当然是使用ProgressMonitor,所以我认为对于手头的情况并不重要。但确实如此!
Andrew说对话关闭时ProgressMonitor
设置isCancelled标志是正确的。这可以通过查看JDK源来验证。但为了捕获该事件,您需要PropertyChangeListener
。使用ProgressMonitorInputStream
时,您很可能没有ProgressMonitor
,因为更新ProgressMonitorInputStream
全部由ProgressMonitorInputStream
处理,因此您不必自己做这部分。我假设ProgressMonitorInputStream
的存在理由是不需要进行样板编码。
我不得不说,与DIY方法相比,我发现使用{{1}}非常小甚至是负面的好处。