哪个 Shell 对象是构建 JFace 对话框的正确对象

Which Shell object is the correct one constructing a JFace dialog

我是 JFace 的新手,正在测试它的一些组件。
现在我对显示模态 window.
的不同方法有点困惑 例如,我有一个带有按钮的应用程序,我想通过单击此按钮打开一个对话框:

public class TestApp extends ApplicationWindow {
  protected Control createContents(Composite parent) {
    Button button1 = new Button(parent, SWT.PUSH);
    button1.setText("Open");
    button1.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        MyDialog myDialog = new MyDialog(...);
        myDialog.open();
      }
    });
  }
}

现在是我必须将哪个 Shell 对象分配给 Dialog 构造函数的问题。
为此,我找到了以下替代方案:

new MyDialog(getShell());
new MyDialog(parent.getShell());
new MyDialog(new Shell());

但哪个是正确的或最常见的?区别在哪里?

你应该使用当前对话框的 shell / window 所以:

new MyDialog(getShell());

是你平时用的。

这使新对话框成为当前 window 的子对话框。因此,如果您关闭 window 对话框也会关闭。