2014-10-09 47 views
0

嗨我對SWT來說比較新。我正在使用CheckboxTableViewer。我有一個聽衆:CheckboxTableViewer在其複選框上單擊時不會改變表格行的焦點

diagnosesTableViewer.getTable().addSelectionListener(new SelectionListener() { 

     @Override 
     public void widgetSelected(SelectionEvent e) { 
      int nomenclatureSelectionIndex = diagnosesTableViewer 
        .getTable().getSelectionIndex(); 
      Nomenclature checkedNomenclature = (Nomenclature) diagnosesTableViewer 
        .getElementAt(nomenclatureSelectionIndex); 
      diagnosesTableViewer.setChecked(checkedNomenclature, 
        !diagnosesTableViewer 
          .getChecked(checkedNomenclature)); 
     } 

當我點擊表格行(任何地方,但複選框),一切都按預期工作。但是,當我單擊特定複選框時,我也取消選中之前選定行的複選框。我認爲這是因爲當我點擊複選框時,它不會將焦點更改爲新行,因此在舊的先前選定的行itlsef和新選擇的行的調用框中調用偵聽器,被稱爲。我該如何解決這個問題?

回答

2

使用CheckboxTableViewer.addCheckStateListener添加一個ICheckStateListener來處理被點擊的複選框。

viewer.addCheckStateListener(new ICheckStateListener() { 
     @Override 
     public void checkStateChanged(CheckStateChangedEvent event) { 
      // event.getChecked() is the check state 
      // event.getElement() is element being checked/unchecked 
     } 
    }); 

您可以

viewer.setSelection(new StructuredSelection(event.getElement())); 

使用

IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); 

選擇在事件中單擊行即可現有的選擇。

+0

我試過這樣做。問題在於,由於焦點仍在舊的先前選擇的行上,所以也在該行上調用了監聽器。當我點擊複選框時,我想以某種方式刪除舊行中的foucs到新行。 – Nemin 2014-10-09 16:16:13

+0

你將不得不選擇點擊行,看到更新的答案。 – 2014-10-09 16:18:29

+0

有什麼方法可以查看元素是否已被選中?如果元素已經被選中,我不想再次調用監聽器。 – Nemin 2014-10-09 16:36:32

相關問題