嗨,我对SWT比较陌生。我正在使用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和我选择的复选框的新行上调用侦听器,其侦听器永远不会被召唤。我该如何解决这个问题?
答案 0 :(得分: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();
获取现有选择。