SWT创建Shell总结和窗体的Modal(模态)状态

By | 5月 10, 2016

此处的讨论,是基于单UI线程的,也就是说只有一个Display实例。

如何创建一个Shell

需要注意,Shell是基于一个Display存在的。

1. new Shell()

【独立】内部使用Display.getDefault()获得一个dispaly,然后创建一个Shell。

2. new Shell(Display display)

【独立】使用传入的Display来创建一个Shell,通常情况下程序只有一个Display。

3. new Shell(Shell parent)

【父子关系】使用传入Shell的display创建一个Shell,内部parent变量会保存传入的shell。只有这种情况下SWT.PRIMARY_MODAL才有用。

总结

使用方法3创建Shell,如果有多个窗体,可以控制局部Parent shell不可点击。使用APPLICATION_MODAL对于上述三种情况,都可以让当前窗体模态化。

窗体的Modal级别

模态窗体,是指当前打开的窗体,是否会阻塞其它的窗体。SWT中的窗体可以是一个打开的Shell,Dialog或者MessageBox。

1. SWT.PRIMARY_MODAL

【仅限方式三】当使用父窗体shell构建shell时,父窗体不能点击,直到当前窗体关闭。但是其它Window是可以点击的。

注意:
如果Dialog使用的是新创建的一个Shell,则PRIMARY_MODAL不起作用。

image

2. SWT.APPLICATION_MODAL

【所有shell】比PRIMARY_MODAL更严格,当前程序的所有窗口都不能点击了,直到当前窗体关闭。

image

3. SWT.SYSTEM_MODAL

【所有shell】比APPLICATION_MODAL更严格,整个操作系统被阻塞,除了当前窗体,其它都不能点击。

注意:
SYSTEM_MODAL在Windows和Linux中都已经不再支持,因为其会冻结整个desktop。如果使用,其会自动降为APPLICATION_MODAL。