【问题标题】:Disable dialog close for ProgressMonitor禁用 ProgressMonitor 的对话框关闭
【发布时间】:2014-03-15 21:51:37
【问题描述】:

我正在使用 Swing 的 ProgressMonitor

这为我生成了这个漂亮的对话框:

老实说,我认为ProgressMonitor 的设计存在缺陷:如果用户通过按红/白十字关闭对话框,您认为会发生什么?是的,你猜对了:它只是关闭/隐藏对话框,你在后台进行的任何工作当然会继续。无法恢复对话框,afaik。

关闭窗口应该意味着“取消”或根本不允许,因为我需要用户等待任务完成或取消它。我如何实现这两个?

如果我能获得对那个 JDialog 的引用,那么我可以这样做:

dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);

但我无法获得该参考。

更新和最终答案

所以,我没有告诉你完整的故事。事实上,我使用ProgressMonitorInputStream,当然在幕后使用ProgressMonitor,所以我认为手头的情况无关紧要。但确实如此!

Andrew 说在对话框关闭时ProgressMonitor 设置isCancelled 标志是正确的。这可以通过查看 JDK 源来验证。但为了赶上该事件,您需要PropertyChangeListener。使用ProgressMonitorInputStream 时,您可能没有(像我一样),因为更新ProgressMonitor 全部由ProgressMonitorInputStream 负责,因此您不必自己做那部分。我假设ProgressMonitorInputStream 的存在理由是不必进行样板编码。

我不得不说,与 DIY 方法相比,我发现使用 ProgressMonitorInputStream 的好处非常小,甚至是负面的。

【问题讨论】:

  • 我在发布问题后才看到this。我想这有点相关。据我所知,ProgressMonitors 根本不适合您想要完全控制的任务。
  • 你可以看看ProgressMonitorDemo,它会在关闭时取消任务。
  • @trashgod。抱歉,我在ProgressMonitorDemo 中看不到这种情况。我正在查看文件ProgressMonitorDemo.java,我真的看不到它。
  • 再看一遍。 @trashgod 说它取消任务是正确的。

标签: java swing


【解决方案1】:

【讨论】:

  • 对,JOptionPane 有一个 windowClosing() 处理程序;您还可以看到工作人员属性的变化。
  • 感谢安德鲁和垃圾神。我已经用最终结论更新了我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多