给表格的单元格增加编辑功能(补充)

简介:

这一篇是对“给表格的单元格增加编辑功能”的补充,目的是让表格列显示Checkbox并允许单击改变选中状态,例子中的表格共有三列,其中后两列均需要显示为Checkbox。

步骤一,构造TableViewer;

final  String[] columnNames  =   new  String[] {  " Project " " Must " " Must Not "  }; // columnNames在后面也要用到,所以专门定义为一个数组
TableColumn column  =   new  TableColumn(tbv.getTable(), SWT.NONE);
column.setText(columnNames[
0 ]);
tbv.setColumnProperties(columnNames);
// 给每个列指定一个字符串属性值
column.setWidth( 200 );
column 
=   new  TableColumn(tbv.getTable(), SWT.NONE);
column.setText(columnNames[
1 ]);
column.setWidth(
100 );
column 
=   new  TableColumn(tbv.getTable(), SWT.NONE);
column.setText(columnNames[
2 ]);
column.setWidth(
100 );
tbv.setContentProvider();
tbv.setLabelProvider();
tbv.setInput();

步骤二,定义CellEditor数组并指定给前面的TableViewer:

final  CellEditor[] editors  =   new  CellEditor[tbv.getTable().getColumnCount()];
// editors[0]保留为空,因为第一列不需要显示为Checkbox
editors[ 1 =   new  CheckboxCellEditor(tbv.getTable());
editors[
2 =   new  CheckboxCellEditor(tbv.getTable());
tbv.setCellEditors(editors);

步骤三,定义TableViewer的CellModifier,作用是告诉表格如何改变对象的属性值,注意在modify()方法里参数element可能是org.eclipse.swt.widgets.Item类型,如果是这种情况要通过Item#getData()得到实际的对象:

tbv.setCellModifier( new  ICellModifier() {
    
public   boolean  canModify(Object element, String property) {
        
return  property.equals(columnNames[ 1 ])  ||  property.equals(columnNames[ 2 ]);
    }

    
public  Object getValue(Object element, String property) {
        PortfolioItem item 
=  (PortfolioItem) element;
        
if  (property.equals(columnNames[ 1 ])) {
            
return  Boolean.valueOf(item.isMust());
        }
        
if  (property.equals(columnNames[ 2 ])) {
            
return  Boolean.valueOf(item.isMustNot());
        }
        
return   null ;
    }

    
public   void  modify(Object element, String property, Object value) {
        
if  (element  instanceof  Item)
            element 
=  ((Item) element).getData();
        PortfolioItem item 
=  (PortfolioItem) element;
        
if  (property.equals(columnNames[ 1 ])) {
            item.setMust(((Boolean) value).booleanValue());
        }
        
if  (property.equals(columnNames[ 2 ])) {
            item.setMustNot(((Boolean) value).booleanValue());
        }
    }
});

步骤四,这时单击表格可以改变选中状态了,但显示的是True/False(或其他在LableProvider里定义的内容),见图1,而非Checkbox控件选中/清空的样子。


图1 单击表格单元可改变T/F

解决的办法很简单,在LabelProvider里根据属性值True/False显示不同的图片即可,这两个图片可以在这里下载(鼠标右键另存为):

public  Object getColumnImage(Object object,  int  columnIndex) {
    PortfolioItem item
= (PortfolioItem)object;
    
switch  (columnIndex) {
    
case   1 :
        
return  item.isMust() ? PortfolioEditPlugin.getPlugin().getImage( " checked " ):PortfolioEditPlugin.getPlugin().getImage( " unchecked " );
    
case   2 :
        
return  item.isMustNot() ? PortfolioEditPlugin.getPlugin().getImage( " checked " ):PortfolioEditPlugin.getPlugin().getImage( " unchecked " );
    
default :
        
return   null ;
    }        
}

public  String getColumnText(Object object,  int  columnIndex) {
    PortfolioItem item
= (PortfolioItem)object;
    
switch  (columnIndex) {
    
case   0 :
        
return  item.getProject() == null ? " N/A " :item.getProject().getName();
// 在显示为Checkbox的两列里不需要文字
//         case 1:
//             return item.isMust()?"True":"False";
//         case 2:
//             return item.isMustNot()?"True":"False";
     default :
        
return   "" ;
    }
}

最后是运行结果:

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

相关文章
|
6月前
|
存储
编辑怎么去获取表格单个的值
编辑怎么去获取表格单个的值
|
JavaScript
fastadmin表格列表内部自定义按钮
fastadmin表格列表内部自定义按钮
381 0
fastadmin表格列表内部自定义按钮
|
3月前
|
JavaScript 前端开发
使用js生成表格标题、表格内容并且每行附带删除按钮然后插入到页面中
使用js生成表格标题、表格内容并且每行附带删除按钮然后插入到页面中
38 2
|
3月前
|
SQL 开发框架 前端开发
在Winform系统开发中,对表格列表中的内容进行分组展示
在Winform系统开发中,对表格列表中的内容进行分组展示
|
3月前
|
存储 开发框架 前端开发
在Winform分页控件中集成保存用户列表显示字段及宽度调整设置
在Winform分页控件中集成保存用户列表显示字段及宽度调整设置
|
6月前
EndNote文献输出引用格式自定义修改与编辑界面解读
EndNote文献输出引用格式自定义修改与编辑界面解读
254 1
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
54 0
|
敏捷开发 前端开发 开发者
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
|
前端开发
前端工作小结75-修改表头按钮样式
前端工作小结75-修改表头按钮样式
100 0
前端工作小结75-修改表头按钮样式
|
人工智能 C#
c#中在datagridview的表格动态增加一个按钮方法
c#中在datagridview的表格动态增加一个按钮方法,如果想要这一套教程的可以移步去这里 《期末作业C#实现学生宿舍管理系统》,对了最近我们有一个人工智能交流群,如果大家对代码有问题,想交流的可以进群,私聊我就可以了! 效果图片 : 在Load事件中写入代码 那ui有了功能怎么办呢?别急我们在 dataGridView1_CellContentClick事件中添加方法 这样的话 我们就可以点击对应行的修改来获取到id的值这里有一个bug就是第三行没数据需要隐藏,现在还没有解决,欢迎大家指出!.....
665 0
c#中在datagridview的表格动态增加一个按钮方法