2013-05-13 103 views
1

我做,我想弹出并禁用它背后的主要外壳,使其不能被点击,而对话是积极的自定义对话框。SWT禁用窗口会导致失去焦点

我最初的计划是类似如下:

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

这个工作,但因为我关闭对话框,它失去这是该对话框之前开壳的焦点。我设法在最后一行之后加入

shell.setFocus(); 

样的解决它,但这个是凌乱的,并导致屏幕闪烁的窗口失去然后获得焦点在一瞬间,也有时不重新集中注意力,我不明白为什么:/

是否有更好的方法来禁用背景窗口没有失去它的焦点。

提前感谢您一瞥

回答

2

你应该创建一个基于this教程一个自定义对话框。

这种方式,你只需要设置为任何您需要的对话框modality,对话框将负责其余的为您服务。

这应该是有帮助的,以及(的Shell的Javadoc):

方式实例的可以使用样式位来指定。模态样式位用于确定输入是否在显示屏上被其他外壳阻塞。 PRIMARY_MODAL样式允许实例阻止对其父项的输入。 APPLICATION_MODAL样式允许实例阻止输入到显示中的每个其他shell。 SYSTEM_MODAL样式允许实例阻止对所有shell的输入,包括属于不同应用程序的shell。

+0

谢谢,这正是我所需要的! – Ronald 2013-05-13 22:24:59

1

正确的做法是创建对话框作为模态窗口。当你创建对话框的外壳时,你应该这样做:

dialogShell = new Shell(mainShell, PRIMARY_MODAL | DIALOG_TRIM); 
+0

谢谢!它的意思是swt.PRIMARY_MODAL,但你明显的意思是:D – Ronald 2013-05-13 22:27:44