Chinaunix首页 | 论坛 | 博客
  • 博客访问: 168922
  • 博文数量: 13
  • 博客积分: 2530
  • 博客等级: 少校
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-15 18:31
文章分类

全部博文(13)

文章存档

2008年(13)

我的朋友

分类: Java

2008-05-31 14:25:14

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) ;

阅读(2588) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~