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

다음 코드 사용 : 선택 수신기를 테이블에 추가하십시오. ctvCheckboxTableViewer의 인스턴스입니다.

또한 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

'SelectionListener' 대신'SelectionAdapter'를 사용하면'widgetDefaultSelected'를 코딩하지 않아도됩니다. –

+0

코드를 변경해 주셔서 감사합니다. –

+0

문제점이 있습니다. 행을 클릭하면 예상대로 작동하지만 확인란을 클릭하면 이전에 클릭 한 행에서 포커스가 제거되지 않으므로 클릭하는 새 행과 함께 해당 행의 상태가 변경됩니다. 이전에 선택한 행에서 포커스를 제거하고 클릭하는 확인란의 행으로 변경할 수있는 방법이 있습니까? – Nemin