【问题标题】:Disposing SelectionListener In SWT on click of another button单击另一个按钮在 SWT 中处理 SelectionListener
【发布时间】:2013-01-04 08:12:57
【问题描述】:

我有一个代码,它向 SWT shell 添加了四个复选框按钮,我在复选框按钮中添加了选择侦听器,我想在单击 SWT Shell 的 OK、CANCEL 和 CLOSE 按钮时将其删除,我该如何处理事件,这是我的代码

grpVersionTreeComponents.setLayoutData(componentsRenderer.createGridData(490, 220, 4));
            for(int versionCount = 0; versionCount < versionSplitters.length ; versionCount++ ){
                String splitter= versionSplitters[versionCount];
                Button cbVersionSplitter = new CheckBoxWrapper().getButton(grpVersionTreeComponents,splitter.toString() , "");
                cbVersionSplitter.setEnabled(true);
                versionSplitterCheckBoxList.add(cbVersionSplitter);
                versionSplitterCheckBoxList.get(versionCount).addSelectionListener(addSplitterCheckBoxListner(cbVersionSplitter));

            }

这是我的选择适配器方法

public SelectionAdapter addSplitterCheckBoxListner(final Button button){
        return new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {


                String[] defaultVersionSplitters =  PropertyClass.getPropertyLabel(QTLConstants.VERSIONING_ASSISTENT_PAGE_SPLLITER).split(QTLConstants.MULTIPLE_EXTENSIONS_SPLITER);
                //check if button.getText() is equal to "Custom Splitter" String
                if(button.getText().equalsIgnoreCase(defaultVersionSplitters[3])){
                    if(button.getSelection()){
                        customVersionSplitterText.setEnabled(true);
                    }else{
                        customVersionSplitterText.setEnabled(false);
                    }

                }


            }

        };
    }

和OK取消按钮都是以这种方式添加的

private void addOkCancelButtonOnVersionTreePopup(final Shell versionTreeComponentsShell){

        Button ok = componentsRenderer.createButtonWidget(versionTreeComponentsShell, SWT.PUSH,
                PropertyClass.getPropertyLabel(QTLConstants.OK_BUTTON));
        Button cancel = componentsRenderer.createButtonWidget(versionTreeComponentsShell, SWT.PUSH,
                PropertyClass.getPropertyLabel(QTLConstants.CANCEL_BUTTON));
        ok.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {

}
        });
}
cancel.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {          
                /*disposeSelectionListener(cbVersionSplitter);*/
                versionTreeComponentsShell.close();             
            }
        });

    }
}

那么我怎样才能删除这个选择监听器

问候

【问题讨论】:

    标签: java swt


    【解决方案1】:

    您可以执行以下操作:

    1)。创建将扩展 SelectionAdapter 类的类。

    2)。像您在代码中所做的那样覆盖 widgetSelected() 方法。

    3)。使用以下内容覆盖 equals(Object other) 方法:

    @Override
    public boolean equals(Object other) {
       if (other == null) {
          return false;
       }
       if (other instanceof MyOwnSelectionAdapter) {
          return true;
       }
    }
    

    其中MyOwnSelectionAdapter 是您自己实现的SelectionAdapter

    4)。现在您可以执行以下操作:cancel.removeSelectionListener(new MyOwnSelectionAdapter());,它将删除该选择侦听器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多