2012-08-15 66 views
1

我正在处理遍历每次通过的对象列表的程序。当一个对象的“时间”(即通过次数)达到时,它会调出一个JDialog来请求它的下一个任务。问题是如何处理一次传递这个请求的多个对象。想要一个JDialog为“模态”,但不阻止其他窗口

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

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

有没有办法让我弹出对话框,让其他窗口可供用户使用,并让其他对象等待轮到他们使用对话框?

+1

看起来你需要某种排队。如果您发布了一些代码,它可能会有所帮助。 – 2012-08-15 22:57:47

+0

亚伦,这些物体已经排成一队了。我只是不知道如何让他们等到JDialog关闭/隐藏之后才能推进队列。 – 2012-08-15 23:42:13

+1

使用如上所述的队列和WindowListener。 – 2012-08-16 00:08:22

回答

2

正如评论中指出的那样,可以通过更改Window的父modality来解决问题。缺点是,“行为是依赖于实现的”。作为替代方案,考虑遍历SwingWorker的后台线程中的对象,并向合适的组件添加新的候选项,例如,将新的候选项添加到合适的组件。 JListJTableJTabbedPane。从组件中选择一个元素会产生一个常规的模态对话框,完成时删除该元素。相关示例显示为here。每个建议的组件都可以用代表其状态的图标来标记。

0

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

相关问题