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