【问题标题】:Remove a selectionlistener from a table从表中删除选择侦听器
【发布时间】:2012-02-04 11:44:21
【问题描述】:

我正在开发一个使用两个表的程序。第一个表有一个选择侦听器,用于向第二个表添加新项目。根据第一个表的值,我希望将另一个选择侦听器添加到第二个表中。如果该值是其他值,我希望删除选择侦听器。我可以将选择侦听器添加到第二个表中,但似乎无法删除它。如果第一个表要求第二个表有选择监听器,而选择监听器似乎加倍了。

tblFirst.addSelectionListener(new SelectionListener() { 
    @Override
    public void widgetSelected(SelectionEvent arg0) {
        TableItem ti = tblFirst.getSelection()[0];
        String selectedText = ti.getText();

        SelectionListener myListener = new SelectionListener(){
            @Override
            public void widgetSelected(SelectionEvent arg0) {
                //do something here
            }
        }
        if(selectedText.equals("sometext")) {
            tblSecond.removeSelectionListener(myListener);
            tblSecond.addSelectionListener(myListener);
        }
    }

在上面的示例中,每次我选择带有文本“sometext”的项目时都会添加 SelectionListener。如果我选择了 3 次,SelectionListener 会被触发 3 次。 removeSelectionListener 不会先删除 selectionlistener。

我该如何进行这项工作?

【问题讨论】:

    标签: java swt selection addeventlistener


    【解决方案1】:

    myListener 指的是一个新实例,而不是上次创建和添加的实例。如果您每次都创建一个新实例并且不保留对它的引用,则无法将其删除。在选择处理程序方法之外只创建一次myListener

    虽然,监听器的整个添加和删除看起来像 kludge - 您应该在 second 监听器中设置一些条件来决定是否对选择更改做出反应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多