Swt/Jface tableviewer入门教程3
来源:互联网 发布:unity3d 面部表情 编辑:程序博客网 时间:2024/06/08 23:53
前边实现了一个表格的基本功能,但这并不够好,能否为表格实现一些更好的功能呢?答案是肯定的。下边我们来加入直接编辑的功能。一、要实现这个功能必须提供一个实现ICellModifier的类。内容如下
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 tv; public static String[] NAMES ={"张三","李四","小红","翠花"}; public MyCellModifier(TableViewer tv){ this.tv = tv; } public boolean canModify(Object element, String property) { return true; } public Object getValue(Object element, String property) { People p = (People)element; if(property.equals("name")){ return new Integer(getNameIndex(p.getName())); }else if(property.equals("sex")){ return new Boolean(p.getSex().equals("男")); }else if(property.equals("age")){ return String.valueOf(p.getAge()); } throw new RuntimeException("error column name : " + property); } private int getNameIndex(String name){ for(int i=0;i<NAMES.length;i++){ if(NAMES[i].equals(name)){ return i; } } return -1; } public void modify(Object element, String property, Object value) { TableItem item = (TableItem)element; People p = (People)item.getData(); if (property.equals("name")){ Integer comboIndex = (Integer)value; if(comboIndex.intValue() == -1){ return ; } String newName = NAMES[comboIndex.intValue()]; p.setName(newName); }else if(property.equals("sex")){ Boolean newValue = (Boolean)value; System.out.println(newValue); if(newValue.booleanValue()){ p.setSex("男"); }else{ p.setSex("女"); } }else if (property.equals("age")){ String newValue = (String)value; if(newValue.equals("")){ return ; } Integer newAge = new Integer(newValue); p.setAge(newAge); }else{ throw new RuntimeException("错误列名:" + property); } tv.update(p, null); } }
二、好了,有了这个类,下一部就是如何把它和TestTableViewer关联起来,在TestTableViewer中setInput()后加入如下内容tableViewer.setColumnProperties(new String[]{"id","name","sex","age","createDate"}); CellEditor[] cellEditor = new CellEditor[5]; cellEditor[0] = null; cellEditor[1] = new ComboBoxCellEditor(tableViewer.getTable(),MyCellModifier.NAMES,SWT.READ_ONLY); cellEditor[2] = new CheckboxCellEditor(tableViewer.getTable()); cellEditor[3] = new TextCellEditor(tableViewer.getTable()); cellEditor[4] = null; tableViewer.setCellEditors(cellEditor); ICellModifier modifier = new MyCellModifier(tableViewer); tableViewer.setCellModifier(modifier);
我们让名字这一列用下拉条来编辑,让性别这一列变成类似checkbox的操作,让年龄这一类变成直接输入ok,尝试一下。三、问题出现,如果年龄的地方我们输入一个非数字呢,所以为了安全起见,我们加入一个验证器,禁止用户输入非数字在上边的内容下加入Text text = (Text)cellEditor[3].getControl(); text.addVerifyListener(new VerifyListener(){ public void verifyText(VerifyEvent e){ String inStr = e.text; if (inStr.length() > 0){ try{ Integer.parseInt(inStr); e.doit = true; }catch(Exception ep){ e.doit = false; } } } });
好了,再试试是否不能输入非整数了?解决。其实还是有些问题的,试着输入个0,呵呵。这里就需要你自己按照自己的实际需求来实现了。但作为demo这个的目的已经达到了。
- Swt/Jface tableviewer入门教程3
- Swt/Jface tableViewer入门教程1
- Swt/Jface tableViewer入门教程2
- Swt/Jface tableviewer入门教程4
- Swt/Jface tableViewer入门教程一(显示tableViewer)
- Swt/Jface tableViewer入门教程一(显示tableViewer)
- Swt/Jface tableViewer入门教程二(让TableViewer按照列排序)
- Swt/Jface tableViewer入门教程(显示tableViewer) 转 受益匪浅
- Swt/Jface tableviewer总结
- Swt/Jface tableViewer总结(二)
- Swt/Jface tableViewer总结(三)
- Swt/Jface tableViewer总结(四)
- Swt/Jface tableViewer总结(五)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableviewer入门教程四(加入filter ,改变行的颜色)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableviewer入门教程四(加入filter ,改变行的颜色)
- 游戏Demos 视频
- Java 的DES算法实现
- Swt/Jface tableViewer入门教程1
- Swt/Jface tableViewer入门教程2
- Symbian OS中的RArray类的排序功能
- Swt/Jface tableviewer入门教程3
- Swt/Jface tableviewer入门教程4
- 全面剖析XMLHttpRequest对象
- Swt/Jface listviewer的实现
- Swt/Jface treeViewer的使用
- 批量数据库拷贝
- 在C#中调用exe文件。
- 为 Eclipse 构建片段扩展
- 电脑桌面图标底色去除