【问题标题】:Want a JDialog to be "modal" but not block other windows希望 JDialog 成为“模态”但不阻塞其他窗口
【发布时间】:2012-08-15 22:53:49
【问题描述】:

我正在开发一个程序,该程序在每次通过时都会遍历一个对象列表。当一个对象的“时间”(即通过次数)到时,它会启动一个 JDialog 来请求它的下一个任务。问题是如何处理多个对象一次性发出这个请求。

如果我制作 JDialog 模态,每个对象依次发出请求,这就是我想要的;但主程序窗口不可用,我不想要。

如果 JDialog 不是模态的,则会出现多个实例,每次传递一个,这是我不想要的;或者,如果我将其设置为单例,则只会出现一个实例,但只有列表中用于发出请求的最后一个对象才能使用它。

有没有一种方法可以弹出对话框,让用户可以使用其他窗口,并让其他对象等待轮到使用该对话框?

【问题讨论】:

  • 看起来您需要某种队列。如果您发布一些代码可能会有所帮助。
  • Aaron,这些对象已经在一个队列中了。我只是不知道如何让他们等到 JDialog 关闭/隐藏后再推进队列。
  • 使用如前所述的队列和 WindowListener。
  • 通过将原始窗口的模态排除类型设置为“应用程序”并在打开其他“完全”模态对话框之前切换回“无排除”来解决。
  • @flibbertygibbet:如果解决了,您可以将其发布为您自己问题的答案。

标签: java swing user-interface jdialog modality


【解决方案1】:

如 cmets 中所述,可以通过更改父 Windowmodality 来解决此问题。不利的一面是,“行为取决于实现。”

作为替代方案,考虑遍历SwingWorker 的后台线程中的对象并将新候选对象添加到合适的组件,例如JListJTableJTabbedPane。从组件中选择一个元素会弹出一个传统的模式对话框,在完成时删除该元素。一个相关的例子显示在here。每个建议的组件都可以用一个代表其状态的图标进行标记。

【讨论】:

    【解决方案2】:

    通过将原始窗口的 ModalExclusionType 设置为“应用程序”并在完成后切换回“不排除”来解决此问题。

    【讨论】:

      猜你喜欢
      • 2014-07-23
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多