根据RCP中的ComboBoxCellEditor选择更改复选框选择

时间:2016-07-05 09:57:36

标签: eclipse-rcp tableviewer

我有一个包含两列的表,其中包含第一列中的复选框和第二列中的ComboBoxCellEditor。当我在ComboBox中选择某些内容时,相应行状态的CheckBox应该更改为选中。

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

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

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中选择了某些内容,如何选中行中ComboBox对应的复选框。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

CheckboxTableViewer viewer = (CheckboxTableViewer)getViewer();

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