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

Используйте этот код: Добавить прослушиватель выбора в таблицу. 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'. –

+0

Спасибо, изменил код. –

+0

У меня проблема с этим. Когда я нажимаю на строку, она работает так, как ожидалось, но когда я нажимаю на этот флажок, я не удаляю фокус из ранее щелкнутой строки, и, следовательно, он изменяет состояние этой строки вместе с новой, которую я нажимаю. Есть ли способ удалить фокус из ранее выбранной строки и изменить его на строку, чей флажок я нажимаю? – Nemin

Смежные вопросы