模态对话 - Swing。仅将输入阻止到UI的某些部分

时间:2010-08-16 21:14:36

标签: java swing

场景:我有一个屏幕,屏幕的上半部分是一些文本字段,窗口的底部是一个列表。

在某些情况下,我想提出一个模态(是/否)对话框,它会阻止用户与窗口的顶部进行交互 - 即:文本字段,但仍然允许用户与列表进行交互在屏幕的底部。

是否可以创建这样的模态对话框?

3 个答案:

答案 0 :(得分:1)

我会编写一个类似setTopPanelDisabled(boolean enabled)的函数,然后调用面板上半部分所有小部件的setEnabled方法。当对话框关闭时,您只需再次调用该方法即可重新启用小部件。

答案 1 :(得分:1)

'部分模态'是不可能的。你必须以某种方式模拟行为。禁用面板及其所有子节点是一种方式(请参阅DrDipshits答案),但如果您不喜欢显示“禁用”外观的小部件,我可以提供另一种解决方法:

将顶部部分渲染为位图,只要显示对话框,就将“真实”面板替换为“屏幕截图”。这将保留实际外观并使顶部面板暂时不寻常。

答案 2 :(得分:1)

这可能有用也可能没用。 Java 6引入了new Modality API

粒度在窗口级别(帧,对话框,...),因此根据“屏幕顶部,屏幕底部”的定义,它可能没有帮助。如果你可以让你的组件在不同的框架中需要不同的模态行为,那么这确实是可能的。如果没有,你可能不得不捏造它。