在RCP中ComboBoxCellEditor选择的基础上更改复选框选择

Change the checkbox selection on the basis of ComboBoxCellEditor selection in RCP

我有一个包含两列的 table,其中包括第一列中的复选框和第二列中的 ComboBoxCellEditor。当我selectComboBox中的东西时,对应行状态的CheckBox应该变成checked。

tabViewer = new TableViewer(innerTopComp, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CHECK );

对于 ComboBoxCellEditor,我创建了一个扩展 EditingSupport 的 class。

public class ComboEditing extends EditingSupport  {

private ComboBoxCellEditor cellEditor;

private String[] comboDataArr;
public ComboEditing( final TableViewer viewer, String[] ComboDataArr) {
    super(viewer);
    this.comboDataArr = ComboDataArr;
    this.cellEditor = new ComboBoxCellEditor(((TableViewer)viewer).getTable(), this.comboDataArr, SWT.DROP_DOWN);  
}

@Override
protected CellEditor getCellEditor(Object element) {
    // TODO Auto-generated method stub
    return cellEditor;
}

@Override
protected boolean canEdit(Object element) {
    // TODO Auto-generated method stub
    return true;
}

@Override
protected Object getValue(Object element) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
protected void setValue(Object element, Object value) {
    // TODO Auto-generated method stub
    if((element instanceof TableData) && (value instanceof Integer)) {
        Integer choice = (Integer)value;
        String option = comboDataArr[choice];
        ((TableData)element).setMatches( option );
        getViewer().update(element, null);

    }
}

}

如何在 ComboBox 中 selected 时选中行中 ComboBox 对应的复选框。

您应该对使用 SWT.CHECK 的表格使用 CheckboxTableViewer,因为它提供了很多处理复选框的方法。

CheckboxTableViewer tabViewer = CheckboxTableViewer.newCheckList(innerTopComp, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);

CheckboxTableViewer 扩展 TableViewer 因此您现有的代码仍然可以。

然后您可以在 EditingSupport setValue 方法中使用 setChecked 方法:

CheckboxTableViewer viewer = (CheckboxTableViewer)getViewer();

viewer.setChecked(element, ... true or false);