Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模型对话框-Swing。仅阻止对UI某些部分的输入_Java_Swing - Fatal编程技术网

Java 模型对话框-Swing。仅阻止对UI某些部分的输入

Java 模型对话框-Swing。仅阻止对UI某些部分的输入,java,swing,Java,Swing,场景:我有一个屏幕,屏幕的顶部是一些文本字段,窗口的底部是一个列表 在某些情况下,我想创建一个模式(yes/no)对话框,该对话框将阻止用户与窗口顶部进行交互,即:文本字段,但仍允许用户与屏幕底部的列表进行交互 有可能创建这样的模式对话框吗?我会编写一个类似setTopPanelDisabled(布尔启用)的函数,然后调用面板上半部分中所有小部件的setEnabled方法。当对话框关闭时,您只需再次调用该方法以重新启用小部件。不可能使用“部分模式”。你必须以某种方式模拟这种行为。禁用面板及其所有

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

在某些情况下,我想创建一个模式(yes/no)对话框,该对话框将阻止用户与窗口顶部进行交互,即:文本字段,但仍允许用户与屏幕底部的列表进行交互


有可能创建这样的模式对话框吗?

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

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


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

这可能有用,也可能无用。Java6引入了一个


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

可能是一个很好的解决方法,谢谢。我宁愿复制一个真正的模态对话框的行为,如果你尝试点击另一个窗口,它不会使组件变灰,也不会按铃,但这可能太难了,再次感谢你。这是一个丑陋的黑客行为,但是你可以将文本字段的禁用颜色设置为启用的颜色。我不知道你是怎么让铃响的,但我知道这是可以做到的。我的一个作业必须使用JFormatted文本字段,当你输入错误时,它会发出嘟嘟声。玩得开心。酷-谢谢你的链接。这可能会奏效。这种模式在几年前的Motif tookit中就有了,很高兴看到Java现在开始使用它。