2012-01-06 140 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 - 你則應在該聽衆一些條件來決定是否應對選擇改變與否。