应该将哪个Shell传递给WizardDialog构造函数

时间:2014-11-13 15:03:11

标签: java swt jface

在我的应用程序中,我想弹出一个在其构造函数中带有WizardDialog参数的JFACE shell

我尝试以两种不同的方式获取shell:

  1. Shell shell = new Shell(display);

  2. Shell shell = display.getActiveShell();

  3. 两种方式似乎都很好,因为他们创造了一个很好的模态对话。 我的问题是,哪一个是正确的?

    实例化一个新shell是有意义的,但是如果活动shell有效,我为什么要这样做呢?

1 个答案:

答案 0 :(得分:1)

传递给WizardDialog的Shell是它的父shell ,例如控制将在哪个监视器上显示对话框。父shell对对话框生命周期也有影响。如果父shell关闭,它的所有子shell也会关闭(见下文)。

该对话框不使用此shell来创建其内容。因此将创建一个新的shell。

因此,您不应创建新shell但使用现有shell。 display.getActiveShell()适用于大多数情况,但我建议使用众所周知的 shell。

在Eclipse工作台应用程序(RCP或Eclipse IDE插件)中打开对话框时可能存在陷阱:display.getActiveShell()如果恰好在当时打开,则可以返回进度监视器对话框向导已打开,并在完成进度报告时意外关闭向导对话框。活动工作台窗口通常是一个很好的选择。