How to add an editable checkbox at JFace TableViewer?
1, create an EditingSupport object for the column. getValue and setValue method be called when user click the checkbox and the value changes.
package dti.cms.additionaldatamgr.view;
import dti.cms.additionaldatamgr.bean.ORMData;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
/**
* Created by IntelliJ IDEA.
* User: lmjiang
* Date: May 26, 2011
* Time: 5:04:08 PM
* To change this template use File | Settings | File Templates.
*/
public class ORMIndicatorEditingSupport extends EditingSupport {
private TableViewer tableViewer;
public ORMIndicatorEditingSupport(TableViewer viewer) {
super(viewer);
this.tableViewer = viewer;
}
@Override
protected CellEditor getCellEditor(Object o) {
return new CheckboxCellEditor(null, SWT.CHECK);
}
@Override
protected boolean canEdit(Object o) {
return true;
}
@Override
protected Object getValue(Object o) {
ORMData ormData = (ORMData) o;
return ormData.isOrmIndicator();
}
@Override
protected void setValue(Object element, Object value) {
ORMData ormData = (ORMData) element;
ormData.setOrmIndicator((Boolean) value);
tableViewer.refresh();
}
}
2, add editing support to specific column.
ormDataTableViewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.BORDER);
//table style
GridData gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = SWT.FILL;
gridData.heightHint = height;
ormDataTableViewer.getTable().setLayoutData(gridData);
ormDataTableViewer.getTable().setHeaderVisible(true);
ormDataTableViewer.getTable().setLinesVisible(true);
//table layout
TableLayout tableLayout = new TableLayout();
CellEditor[] cellEditors = new CellEditor[columns.length];
for (int i = 0; i < columns.length; i++) {
tableLayout.addColumnData(new ColumnWeightData(width / columns.length, true));
TableViewerColumn tableViewerColumn = new TableViewerColumn(ormDataTableViewer, SWT.CENTER);
TableColumn tableColumn = tableViewerColumn.getColumn();
tableColumn.setText(columns[i]);
tableColumn.setMoveable(true);
if (i < columns.length - 1) {
cellEditors[i] = new TextCellEditor(ormDataTableViewer.getTable());
} else {
tableViewerColumn.setEditingSupport(new ORMIndicatorEditingSupport(ormDataTableViewer));
}
ormDataTableViewer.getTable().getColumn(i).pack();
}
ormDataTableViewer.getTable().setLayout(tableLayout);
if (editable) ormDataTableViewer.setCellEditors(cellEditors);
come from http://www.vogella.de/articles/EclipseJFaceTable/article.html