2012-01-06 81 views
1

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

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

采用上述例子中,是SelectionListener中每个I选择具有文本“SomeText”则会一个项目时添加。如果我选择了这个项目三次,SelectionListener会被触发三次。 removeSelectionListener不会首先删除selectionlistener。

我该如何做这项工作?

回答

3

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

虽然,整个添加和听众的去除似乎是一个kludge - 你则应在该听众一些条件来决定是否应对选择改变与否。