我正在制作我要弹出的自定义对话框,并禁用其后面的主shell,以便在对话框处于活动状态时无法单击它。
我的初步计划如下:
shell.setEnabled(false);
doDialogStuff();
shell.setEnabled(true);
这很有效,但是当我关闭对话框时,它会失去对话框之前打开的shell的焦点。我设法通过添加
来修复它shell.setFocus();
在最后一行之后但是这很乱并导致屏幕在窗口丢失时闪烁,然后在一瞬间获得焦点,同时,它有时不会重新获得焦点,我无法理解为什么:/
是否有更好的方法可以在不失去焦点的情况下禁用背景窗口。
提前致谢SO窥视
答案 0 :(得分:2)
您应该根据this教程创建自定义对话框。
通过这种方式,您只需将对话框的modality设置为您需要的对象,对话框将为您完成剩下的工作。
这也应该有用(Shell
的Javadoc):
可以使用样式位指定实例的模态。模态样式位用于确定输入是否被阻止显示器上的其他外壳。
PRIMARY_MODAL
样式允许实例阻止对其父级的输入。APPLICATION_MODAL
样式允许实例阻止输入到显示中的每个其他shell。SYSTEM_MODAL
样式允许实例阻止对所有shell的输入,包括属于不同应用程序的shell。
答案 1 :(得分:1)
正确的做法是将对话框创建为模态窗口。当您创建对话框的shell时,您应该执行类似
的操作dialogShell = new Shell(mainShell, PRIMARY_MODAL | DIALOG_TRIM);