2014-10-09 2 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

나는 그것을 시도했다. 문제는 여전히 이전에 선택된 행에 포커스가 있기 때문에 리스너가 해당 행에서도 호출된다는 것입니다. 나는 어떻게 든 확인란을 클릭하면 이전 행을 새 행으로 제거하려고합니다. – Nemin

+0

클릭 한 행을 선택해야합니다. 업데이트 된 답변을 참조하십시오. –

+0

요소가 이미 선택되어 있는지 확인할 수있는 방법이 있습니까? 엘리먼트가 이미 선택 되었다면 리스너를 다시 호출하고 싶지 않습니다. – Nemin