我创建了一个包含两列的 tableViewer,我想将其中一列设置为复选框。为此,我创建了一个 CheckBoxCellEditor,但我不知道它为什么不起作用。
名为 tableName 的列显示其值正常。
列规范如下。
String[] COLUMN_HEADINGS = {"Select", "Table name"};
TableColumnLayout tableLayout = new TableColumnLayout();
parent.setLayout(tableLayout);
//Set what would display each column
TableViewerColumn selectCheckBox = createTableViewerColumn(COLUMN_HEADINGS[0], 0);
selectCheckBox.getColumn().setResizable(false);
selectCheckBox.setLabelProvider(new ColumnLabelProvider(){
@Override
public String getText(Object element) {
return null;
}
});
//Set what would display each column
TableViewerColumn tableName = createTableViewerColumn(COLUMN_HEADINGS[1], 1);
tableName.getColumn().setResizable(false);
tableName.setLabelProvider(new ColumnLabelProvider(){
public String getText(Object element) {
if(element instanceof TableMetaData && element != null)
return ((TableMetaData)element).getName();
return super.getText(element);
}
});
//Set the dimensions of each column
tableLayout.setColumnData(selectCheckBox.getColumn(), new ColumnWeightData(10));
tableLayout.setColumnData(tableName.getColumn(), new ColumnWeightData(90));
//Set column type (checkbox)
selectCheckBox.setEditingSupport(new ResourcesConfigCheckEditingSupport(this));
EditingSupport 如下:
public class ResourcesConfigCheckEditingSupport extends EditingSupport{
private CheckboxCellEditor cellEditor;
public ResourcesConfigCheckEditingSupport(ColumnViewer viewer) {
super(viewer);
// TODO Auto-generated constructor stub
cellEditor = new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
}
@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 false;
}
@Override
protected Object getValue(Object element) {
// TODO Auto-generated method stub
return ((TableMetaData) element).getIsSelected();
}
@Override
protected void setValue(Object element, Object value) {
// TODO Auto-generated method stub
((TableMetaData) element).setIsSelected(Boolean.valueOf((boolean) value));
getViewer().update(element, null);
}
}
TableMetaData 对象决定复选框是否被选中。如何修复我的代码以使其正常工作?
谢谢。
最佳答案
Vogella 有一个完整的例子,你可以在这里找到:http://www.vogella.com/tutorials/EclipseJFaceTableAdvanced/article.html
在第 4 节中,使用了 CheckboxCellEditor
。它可能对您有所帮助。
关于java - 如何在 JFace 的 TableViewer 中创建复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40605677/