给表格的单元格增加编辑功能(In place edit)

简介: 使用纯粹的SWT可以实现在单元格中编辑(In place edit)的功能,代码见这个例子,这里要说的是利用jface完成差不多的工作:用户单击单元格,出现一个下拉菜单,用户通过选择来改变单元格所代表的该行对象的属性。

使用纯粹的SWT可以实现在单元格中编辑(In place edit)的功能,代码见这个例子,这里要说的是利用jface完成差不多的工作:用户单击单元格,出现一个下拉菜单,用户通过选择来改变单元格所代表的该行对象的属性。

对org.eclipse.jface.viewers.TableViewer.TableViewer的介绍这里就不赘述了,一般我们都是像下面这样定义TableViewer的:

TableViewer viewer = new TableViewer(...); 
viewer.getTable().setHeaderVisible(true); 
viewer.setContentProvider(...); 
viewer.setLabelProvider(...); 
//Add table columns 
TableColumn column = new TableColumn(viewer.getTable(), SWT.NONE); 
column.setText("..."); 

要增加编辑功能,首先得定义一个org.eclipse.jface.viewers.CellEditor数组,对应TableViewer的每一列,在我们这个例子里,第二列(Column 1)需要用下拉框编辑,所以可以这样定义这个CellEditor数组。

final CellEditor[] editors = new CellEditor[tvOre.getTable().getColumnCount()]; 
editors[1] = new ComboBoxCellEditor(viewer.getTable(), new String[] {}, SWT.READ_ONLY); 
viewer.setCellEditors(editors);
viewer.setColumnProperties(columnNames); 

再定义这个TableViewer的CellModifier(org.eclipse.jface.viewers.ICellModifier),该接口定义了三个方法,canModify()指出该单元格是否可被编辑;getValue()应返回单元格的当前值,因为我们使用的是下拉框,所以要返回一个Integer表示当前选中的index;modify()方法中我们将用户修改的值反映到实际模型中。代码如下,注意代码里IOre是我们模型的一部分,表格中每一行是一个IOre对象,IOre.getOrderParams()得到的就是下拉框中的选项,每行的选项与那一行代表的IOre对象有关:

viewer.setCellModifier(new ICellModifier() { 
    public boolean canModify(Object element, String property) { 
        IOre ore = (IOre) element; 
        String[] items = new String[ore.getOrderParams().size()]; 
        for (int i = 0; i < ore.getOrderParams().size(); i++) { 
            NameValuePair pair = (NameValuePair) ore.getOrderParams().get(i); 
            items[i] = pair.getValue(); 
        } 
        editors[1] = new ComboBoxCellEditor(viewer.getTable(), items, SWT.READ_ONLY); 
        return property.equals(columnNames[1]); 
    } 
 
    public Object getValue(Object element, String property) { 
        if (property.equals(columnNames[1])) { 
            IOre ore = (IOre) element; 
            for (int i = 0; i < ore.getOrderParams().size(); i++) { 
                NameValuePair pair = (NameValuePair) ore.getOrderParams().get(i); 
                if (pair.getValue().equals(ore.getOrderParamValue())) 
                    return new Integer(i); 
            } 
            return new Integer(0); 
        } 
        return null; 
    } 
 
    public void modify(Object element, String property, Object value) { 
        TableItem item = (TableItem) element; 
        IOre ore = (IOre) item.getData(); 
        NameValuePair pair = (NameValuePair) ore.getOrderParams().get(((Integer) value).intValue()); 
        ore.setOrderParamValue(pair.getValue()); 
        viewer.refresh(); 
    } 
}); 

接下来……哦,原来已经大功告成了,真是太容易了!不相信吗,请看下面的运行结果。

本文转自博客园八进制的博客,原文链接:给表格的单元格增加编辑功能(In place edit),如需转载请自行联系原博主。

相关文章
|
5月前
|
存储
编辑怎么去获取表格单个的值
编辑怎么去获取表格单个的值
|
6月前
layUI数据表格可编辑表格单元格值修改之后获取修改前的值
layUI数据表格可编辑表格单元格值修改之后获取修改前的值
160 0
|
3天前
LabVIEW更改Tab所选标签的颜色
LabVIEW更改Tab所选标签的颜色
|
6月前
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
26 0
ArcMap图层标签Label显示内容的修改方法
本文介绍在ArcMap软件中,修改图层标签(Label)所显示字段与具体显示内容的方法~
276 1
ArcMap图层标签Label显示内容的修改方法
|
前端开发
Element-ui中 实现多选表格(Table)增加 ‘全选’ 字样
Element-ui中 实现多选表格(Table)增加 ‘全选’ 字样
863 0
Element-ui中 实现多选表格(Table)增加 ‘全选’ 字样
|
JavaScript 开发工具 git
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
987 0
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
|
人工智能 C#
c#中在datagridview的表格动态增加一个按钮方法
c#中在datagridview的表格动态增加一个按钮方法,如果想要这一套教程的可以移步去这里 《期末作业C#实现学生宿舍管理系统》,对了最近我们有一个人工智能交流群,如果大家对代码有问题,想交流的可以进群,私聊我就可以了! 效果图片 : 在Load事件中写入代码 那ui有了功能怎么办呢?别急我们在 dataGridView1_CellContentClick事件中添加方法 这样的话 我们就可以点击对应行的修改来获取到id的值这里有一个bug就是第三行没数据需要隐藏,现在还没有解决,欢迎大家指出!.....
569 0
c#中在datagridview的表格动态增加一个按钮方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
PyQt5 技术篇-QTableWidget表格组件的行选择与列选择实例演示,表格组件的双击事件捕获,获取表格选中单元格的值
PyQt5 技术篇-QTableWidget表格组件的行选择与列选择实例演示,表格组件的双击事件捕获,获取表格选中单元格的值
1063 0
PyQt5 技术篇-QTableWidget表格组件的行选择与列选择实例演示,表格组件的双击事件捕获,获取表格选中单元格的值