1

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

我最初的计划是这样的:

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

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

shell.setFocus();

在最后一行之后,但这很混乱,导致屏幕闪烁,因为窗口丢失然后在瞬间获得焦点,而且,有时它不会重新获得焦点,我不明白为什么:/

有没有更好的方法来禁用背景窗口而不会失去焦点。

提前谢谢所以偷看

4

2 回答 2

2

您应该根据教程创建一个自定义对话框。

这样,您只需将对话框的模态设置为您需要的任何内容,对话框将为您处理其余部分。

这也应该有帮助(Javadoc of Shell):

可以使用样式位指定实例的模态。模态样式位用于确定是否为显示器上的其他 shell 阻止输入。该PRIMARY_MODAL样式允许实例阻止对其父级的输入。该APPLICATION_MODAL样式允许实例阻止对显示中的每个其他 shell 的输入。该SYSTEM_MODAL样式允许实例阻止对所有 shell 的输入,包括属于不同应用程序的 shell。

于 2013-05-13T21:55:55.737 回答
1

正确的做法是将对话框创建为模式窗口。当您创建对话框的外壳时,您应该执行类似的操作

dialogShell = new Shell(mainShell, PRIMARY_MODAL | DIALOG_TRIM);
于 2013-05-13T22:00:19.100 回答