SWT禁用窗口导致失去焦点

时间:2013-05-13 21:52:37

标签: java swt

我正在制作我要弹出的自定义对话框,并禁用其后面的主shell,以便在对话框处于活动状态时无法单击它。

我的初步计划如下:

shell.setEnabled(false);
doDialogStuff();
shell.setEnabled(true);

这很有效,但是当我关闭对话框时,它会失去对话框之前打开的shell的焦点。我设法通过添加

来修复它
shell.setFocus();

在最后一行之后但是这很乱并导致屏幕在窗口丢失时闪烁,然后在一瞬间获得焦点,同时,它有时不会重新获得焦点,我无法理解为什么:/

是否有更好的方法可以在不失去焦点的情况下禁用背景窗口。

提前致谢SO窥视

2 个答案:

答案 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);