以前實現SWT中的模式和非模式窗體(modal or non-modal window
)是通過在子窗體中是否截取父窗體的消息循環來實現的,現在發現這樣好像不行了,但可以通過指定子窗體的樣式(style)來制定子窗體是否是模式窗體。
Shell child = new Shell(shell,SWT.SHELL_TRIM|SWT.APPLICATION_MODAL);
上面的語句指定了子窗體child為模式窗體。在上面的style中指定SWT.SHELL_TRIM 是為了顯示窗體的三個默認按鈕(最大,最小和關閉),也可以用SWT.DIALOG_TRIM,不過此時為對話框樣式,只有一個默認按鈕(關閉)。默認的Shell是非模式窗體,并且是有默認系統按鈕的,即樣式為:SWT.SHELL_TRIM|SWT.MODELESS。
順便說一下,在JFace的Dialog中使用模式對話框只要簡單的設置該對話框setBlockOnOpen(true)即可。
Shell child = new Shell(shell,SWT.SHELL_TRIM|SWT.APPLICATION_MODAL);
上面的語句指定了子窗體child為模式窗體。在上面的style中指定SWT.SHELL_TRIM 是為了顯示窗體的三個默認按鈕(最大,最小和關閉),也可以用SWT.DIALOG_TRIM,不過此時為對話框樣式,只有一個默認按鈕(關閉)。默認的Shell是非模式窗體,并且是有默認系統按鈕的,即樣式為:SWT.SHELL_TRIM|SWT.MODELESS。
順便說一下,在JFace的Dialog中使用模式對話框只要簡單的設置該對話框setBlockOnOpen(true)即可。