Java 禁用ProgressMonitor的对话框关闭
我和斯温一起工作 这为我生成了一个漂亮的对话框: 老实说,我认为Java 禁用ProgressMonitor的对话框关闭,java,swing,Java,Swing,我和斯温一起工作 这为我生成了一个漂亮的对话框: 老实说,我认为ProgressMonitor的设计有一个缺陷:如果用户按下红/白十字关闭对话框,您认为会发生什么?是的,你猜对了:它只是关闭/隐藏对话框,你在后台做的任何工作当然都会继续。没办法把对话框拿回来,好吗 关闭窗口应该意味着“取消”或者根本不允许,因为我需要用户等待任务完成或者取消它。我如何实现这两个目标 如果我能得到对JDialog的引用,那么我可以: dialog.setDefaultCloseOperation(JDialog.
ProgressMonitor
的设计有一个缺陷:如果用户按下红/白十字关闭对话框,您认为会发生什么?是的,你猜对了:它只是关闭/隐藏对话框,你在后台做的任何工作当然都会继续。没办法把对话框拿回来,好吗
关闭窗口应该意味着“取消”或者根本不允许,因为我需要用户等待任务完成或者取消它。我如何实现这两个目标
如果我能得到对JDialog的引用,那么我可以:
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
但我找不到那个参考资料
更新和最终答案
所以,我没有告诉你全部的故事。事实上,我使用的当然是在封面下使用的,所以我认为这对手头的案子来说并不重要。但确实如此
Andrew说得对,ProgressMonitor
在对话框关闭时设置标志。这可以通过查看JDK源代码来验证。但为了捕捉该事件,您需要一个PropertyChangeListener
。使用ProgressMonitorInputStream
时,您可能不会有一个(像我一样),因为更新ProgressMonitor
都是由ProgressMonitorInputStream
负责的,所以您不必自己做这部分。我的假设是,ProgressMonitorInputStream
的理由是不必做样板代码
我不得不说,与DIY方法相比,我发现使用
ProgressMonitorInputStream的好处非常小,甚至是负面的。检查,确实如此。我在发布问题后才看到。我想这有点关联。据我所知,ProgressMonitors根本不适用于您想要完全控制的任务。您可以看看,它会在关闭时取消任务。@trashgood。很抱歉,我看不出ProgressMonitorDemo
中有这种情况。我正在查看文件ProgressMonitorDemo.java
,但我确实看不到它。请再看一次@垃圾神说它取消任务是正确的。对,JOptionPane
有一个windowClosing()
处理程序;你也可以看到工人财产的变化。谢谢安德鲁和垃圾神。我已经用最终结论更新了我的帖子。