java - createButton - SWT.PUSH 与 OK

标签 java button swt

这是我的 createButtonsForButtonsBar 方法。

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

我必须改变

Button okButton = createButton(parent, OK, "Close Aplot", true);

Button okButton = createButton(parent, SWT.PUSH, "Close Aplot", true);

因为 OK 版本在此行抛出运行时空指针错误

getShell().setVisible(false);

错误大致:

Unhandled event loop exception java.lang.NullPointerException at com.test.BaseDialog$7.widgetSelected(BaseDialog.java:277

问题:

OKSWT.PUSH 之间有什么区别?

为什么 OK 会导致上面的错误?

最佳答案

因为OK是一个系统按钮ID,指示某些行为。特别是,按OK按钮将关闭该对话框。同时,您添加了一个按钮选择监听器,尝试关闭对话框。可以理解,这会失败。

但是,您在这里所做的是创建一个不是系统默认按钮并且没有关联的默认行为的按钮。但是您混淆了 SWT.PUSH(样式常量)和按钮 ID。如果您想提供自己的按钮 ID,则需要使用大于 IDialogConstants.CLIENT_ID 的 ID。

您可能想要做的只是让系统为您关闭对话框,完全删除您的选择监听器。如果您想在对话框关闭时执行某些操作(例如清理一些句柄),则只需重写 close()

关于java - createButton - SWT.PUSH 与 OK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301413/

相关文章:

java - 用户定义标记接口(interface)有什么用

php - 将mysql数据库中的编号加载到文本框中

java - eclipse 插件 setBounds 属性不起作用

c# - 通过在 C# GUI 中按下按钮调用 C++ DLL

android - 如何从 Android 上的 v7 工具栏中删除后退按钮?

java - 将 CTabItem 从一个 CTabFolder 移动到另一个 CTabFolder

java - 在 Swing 应用程序中运行 SWT 组件

java - 在多个 Map-Reduce 作业之间传递数据库连接对象

java - Java 中的方法覆盖和重载

java - 如何避免创建新的 ObjectMapper 实例,每个来自外部系统的类型响应都被 Jackson 接收和解析?