ok,到现在,一个负责显示的表已经搞定了.
但是表格只可以显示,不可以编辑,我们需要为表格添加编辑功能.这里用到两个编辑器:TextCellEditor(普通文本编辑器);ComboBoxCellEditor(下拉控件编辑器),使用这两个编辑器,需要先实现ICellModifier接口
实现ICellModifier接口的MyCellModifier类:
MyCellModifier.java
import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.TableItem;
public class MyCellModifier implements ICellModifier { private TableViewer viewer ;
public MyCellModifier(TableViewer viewer){ this.viewer = viewer ; } @Override public boolean canModify(Object element, String property) { return true; }
@Override public Object getValue(Object element, String property) { return null;
}
@Override public void modify(Object element, String property, Object value) {
return null; } } |
我没看懂api中如何解释这3个方法,但猜测大概的内容是这样的:
Object element 是获取的表格中一行的全部内容,并封装成一个对象;
String property 是表格中的列名.应该与tableViewer.setColumnProperty(XXX)中的XXX对应;
Object value 单元格的内容(具体下来应该跟Person中定义的属性类型相对应).
ok,那么canModify就指定了哪列是否可编辑.getValue返回某一列中的值,modify即为修改后显示的内容
接下来,我们指定id列中的内容不可编辑
public boolean canModify(Object element, String property) { //设定id列不可编辑 if(property.equals(TableConfigure.COLUMN_NAME[0])){ return false ; } return true; }
|
为姓名列添加combo下拉控件
public Object getValue(Object element, String property) { Person p = (Person)element ; //在第一列中添加combo下拉控件,需要根据名称查找控件数组中的下标id if(property.equals(TableConfigure.COLUMN_NAME[1])) return new Integer(getNameIndex(p.getName())); throw new RuntimeException("error column name : " + property); }
|
为年龄列添加text文本编辑
else if(property.equals(TableConfigure.COLUMN_NAME[3])) return String.valueOf(p.getAge());
|
修改内容
@Override public void modify(Object element, String property, Object value) { TableItem item = (TableItem)element; Person p = (Person)item.getData();
if (property.equals(TableConfigure.COLUMN_NAME[1])){ Integer comboIndex1 = (Integer)value; if(comboIndex1.intValue() == -1){ return ; } String newName = sName[comboIndex1.intValue()]; p.setName(newName); } else if(property.equals(TableConfigure.COLUMN_NAME[3])){ String newAge = (String)value ; if(newAge.equals("")){ return ; } p.setAge(Integer.parseInt(newAge)) ; } viewer.refresh() ; }
|
添加编辑比较简单:
1.设置表格的列属性 tableViewer.setColumnProperties(TableConfigure.COLUMN_NAME) ;
2.设置编辑器
CellEditor[] editors = new CellEditor[5] ; editors[0] = null ; editors[3] = null ; editors[4] = null ;
|
3.添加TextCellEditor编辑器
editors[3] = new TextCellEditor(tableViewer.getTable()) ;
|
4.添ComboBoxCellEditor编辑器
editors[1] = new ComboBoxCellEditor(tableViewer.getTable(), MyCellModifier.sName,SWT.READ_ONLY) ;
|
最后,在表格中添加编辑器
tableViewer.setCellEditors(editors) ; ICellModifier modifier = new MyCellModifier(tableViewer) ; tableViewer.setCellModifier(modifier) ;
|
阅读(2618) | 评论(0) | 转发(0) |