从表中删除selectionlistener

时间:2012-01-06 19:04:16

标签: java swt selection addeventlistener

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

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。如果我选择了三次该项目,则会激活SelectionListener三次。 removeSelectionListener不会首先删除selectionlistener。

我如何使这项工作?

1 个答案:

答案 0 :(得分:3)

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

虽然,整个添加和删除监听器看起来像kludge - 你应该在第二个监听器中有一些条件来决定是否对选择改变做出反应。 / p>