0

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

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();
      }
    });
  }

但是 close(); 正在处理我所有的 SWT 小部件并导致运行时错误。尝试打开对话框备份时,SWT_Widget 已释放。所以有了一些建议,我尝试加入隐藏外壳。所以我删除了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);

如果我删除“OK”并将其替换为 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。那么我怎样才能改变我必须正确照顾贝壳的东西呢?

谢谢

编辑

这看起来正确吗?

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

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

1 回答 1

0

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

于 2013-03-12T03:47:50.137 回答