2014-10-08 41 views
0

我對SWT非常陌生。實際上,今天開始研究它。我有一個CheckboxTableViewer類型的表。我希望能夠做的是每當用戶選擇行(即在行的任何地方點擊)我想檢查複選框(打勾)。目前我對的CheckboxTableViewer監聽器如下:單擊行時設置CheckboxTableViewer的複選框

diagnosesTableViewer.addCheckStateListener(new ICheckStateListener() { 

     @Override 
     public void checkStateChanged(CheckStateChangedEvent event) { 

      Nomenclature changedStateNomenclature = (Nomenclature) event 
        .getElement(); 
      if (event.getChecked()) { 
       selectedNomenclatures.add(changedStateNomenclature); 
      } else { 
       selectedNomenclatures.remove(changedStateNomenclature); 
      } 
     } 

    }); 

我能夠通過在方框內打勾,以選擇該行。但是,即使用戶通過單擊任何列上的該行上的任何位置(而不僅僅是複選框)來選擇該行,我也希望選中該複選框。

我想這個邏輯會在addSelectionChangedListener的addSelectionChangedListener的某處。但我不知道該怎麼去做。誰能幫我這個?

回答

2

使用此代碼:將選擇偵聽器添加到表中。 ctv是您的CheckboxTableViewer的實例。我也假設CheckboxTableViewer只允許單選不多。

ctv.getTable().addSelectionListener(new SelectionAdapter() { 

    @Override 
    public void widgetSelected(SelectionEvent e) { 
     int df = ctv.getTable().getSelectionIndex(); 
     ctv.setChecked(ctv.getElementAt(df), !ctv.getChecked(ctv.getElementAt(df))); 
    }   
}); 
+0

您可以使用'SelectionAdapter'而不是'SelectionListener'來避免編寫'widgetDefaultSelected'。 – 2014-10-09 07:00:50

+0

謝謝改變了代碼。 – 2014-10-09 07:22:32

+0

我遇到了這個問題。當我點擊該行時,它按預期工作,但是當我單擊複選框時,我不會從先前單擊的行中刪除焦點,因此它會更改該行的狀態以及我單擊的新行。有沒有一種方法可以將焦點從先前選定的行中移除,並將其更改爲我單擊的複選框? – Nemin 2014-10-09 15:15:02