隐藏用户的对话框而不关闭它

时间:2013-03-11 15:51:29

标签: shell button swt

我的应用程序编写为在OOTB应用程序中运行。用户可以从OOTB应用程序中选择数据并将其存储在我的应用程序中的WritableList中。然后,用户可以单击OOTB工具栏中的一个按钮,该按钮将打开我的应用程序的基本对话框。该对话框向用户显示他们已选择的数据表。从基础对话框中,他们可以对表中的数据执行不同的任务。这包括删除数据以及从OOTB应用程序中选择更多数据。我的应用程序将保存数据,直到用户关闭OOTB应用程序关闭。但我必须在基本对话框中为用户提供一个按钮,以从他们的视图中删除对话框。因此,当他们使用OOTB应用程序时,对话框不会妨碍他们。我的基本对话框是基于TitleAreaDialog构建的。我的第一次尝试是在createButtonForButtonBar方法中关闭dailog。

protected void createButtonsForButtonBar(Composite parent) {
   Button okButton = createButton(parent, OK, "Close Aplot", true);
   okButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
         viewer = null;
         close();
      }
    });
  }

但是关闭();处理我的所有SWT小部件并导致运行时错误。尝试打开对话框时,SWT_Widget已经处理完毕。因此,有了一些建议,我试图将shell隐藏起来。所以我删除了close()并放在getShell()中。

protected void createButtonsForButtonBar(Composite parent) {
  Button okButton = createButton(parent, OK, "Close", true);
  okButton.setEnabled(true);
  okButton.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
        viewer = null;
        getShell().setVisible(false);
    }
  });

}

现在我在行获取运行时空指针异常:getShell()。setVisible(false);

如果我删除“确定”并将其替换为SWT_PUSH。它似乎没有错误。

protected void createButtonsForButtonBar(Composite parent) {
  Button okButton = createButton(parent, SWT.PUSH, "Close Aplot", true);
  okButton.setEnabled(true);
  okButton.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
        viewer = null;
        getShell().setVisible(false);
    }
  });

}

在之前的一个问题中,我意识到这不是一个好习惯。

那么我该如何隐藏我的dailog而不关闭呢?我假设我必须保持方法createButtonsForButtonBar。那么我怎么能改变我所拥有的东西来正确处理shell hide呢?

由于

修改

这看起来是否正确?

 @Override
 protected void createButtonsForButtonBar(final Composite parent) {
    createButton(parent, IDialogConstants.OK_ID, "Close Aplot",
        true);
 }

 @Override
 protected void okPressed() {
   viewer = null;
   getShell().setVisible(false);
}

1 个答案:

答案 0 :(得分:0)

您可以尝试org.eclipse.swt.widgets.Decorations.setMinimized(boolean)在用户点击按钮时最小化对话框?这会是一个更好的解决方案吗?