Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
2008-08-06 18:25
826 查看
前边实现了一个表格的基本功能,但这并不够好,能否为表格实现一些更好的功能呢?答案是肯定的。下边我们来加入直接编辑的功能。
一、要实现这个功能必须提供一个实现ICellModifier的类。内容如下
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.ICellModifier;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.TableViewer;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.widgets.TableItem;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
public class MyCellModifier implements ICellModifier
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private TableViewer tv;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public static String[] NAMES =
![](http://www.blogjava.net/Images/dot.gif)
{"张三","李四","小红","翠花"};
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public MyCellModifier(TableViewer tv)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.tv = tv;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public boolean canModify(Object element, String property)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public Object getValue(Object element, String property)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
People p = (People)element;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
if(property.equals("name"))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Integer(getNameIndex(p.getName()));
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
}else if(property.equals("sex"))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Boolean(p.getSex().equals("男"));
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
}else if(property.equals("age"))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return String.valueOf(p.getAge());
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
throw new RuntimeException("error column name : " + property);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
private int getNameIndex(String name)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
for(int i=0;i<NAMES.length;i++)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
if(NAMES[i].equals(name))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return i;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return -1;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void modify(Object element, String property, Object value)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
TableItem item = (TableItem)element;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
People p = (People)item.getData();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
if (property.equals("name"))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Integer comboIndex = (Integer)value;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
if(comboIndex.intValue() == -1)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return ;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
String newName = NAMES[comboIndex.intValue()];
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
p.setName(newName);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
}else if(property.equals("sex"))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Boolean newValue = (Boolean)value;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println(newValue);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
if(newValue.booleanValue())
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
p.setSex("男");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
}else
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
p.setSex("女");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
}else if (property.equals("age"))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
String newValue = (String)value;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
if(newValue.equals(""))
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return ;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Integer newAge = new Integer(newValue);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
p.setAge(newAge);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
}else
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
throw new RuntimeException("错误列名:" + property);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tv.update(p, null);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
二、好了,有了这个类,下一部就是如何把它和TestTableViewer关联起来,在TestTableViewer中setInput()后加入如下内容
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
tableViewer.setColumnProperties(new String[]
![](http://www.blogjava.net/Images/dot.gif)
{"id","name","sex","age","createDate"});
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
CellEditor[] cellEditor = new CellEditor[5];
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
cellEditor[0] = null;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
cellEditor[1] = new ComboBoxCellEditor(tableViewer.getTable(),MyCellModifier.NAMES,SWT.READ_ONLY);
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
cellEditor[2] = new CheckboxCellEditor(tableViewer.getTable());
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
cellEditor[3] = new TextCellEditor(tableViewer.getTable());
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
cellEditor[4] = null;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
tableViewer.setCellEditors(cellEditor);
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
ICellModifier modifier = new MyCellModifier(tableViewer);
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
tableViewer.setCellModifier(modifier);我们让名字这一列用下拉条来编辑,让性别这一列变成类似checkbox的操作,让年龄这一类变成直接输入
ok,尝试一下。
三、问题出现,如果年龄的地方我们输入一个非数字呢,所以为了安全起见,我们加入一个验证器,禁止用户输入非数字
在上边的内容下加入
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Text text = (Text)cellEditor[3].getControl();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
text.addVerifyListener(new VerifyListener()
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void verifyText(VerifyEvent e)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
String inStr = e.text;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
if (inStr.length() > 0)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
try
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Integer.parseInt(inStr);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.doit = true;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
}catch(Exception ep)
![](http://www.blogjava.net/Images/dot.gif)
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.doit = false;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
});好了,再试试是否不能输入非整数了?解决。其实还是有些问题的,试着输入个0,呵呵。这里就需要你自己按照自己的实际需求来实现了。
但作为demo这个的目的已经达到了。
source下载:http://www.blogjava.net/Files/dreamstone/jface-3.rar
相关文章推荐
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableviewer入门教程四(加入filter ,改变行的颜色)
- Swt/Jface tableviewer入门教程四(加入filter ,改变行的颜色)
- Swt/Jface tableviewer入门教程四(加入filter ,改变行的颜色)
- Swt/Jface tableviewer入门教程四(加入filter ,改变行的颜色)
- Swt/Jface tableViewer入门教程1
- Swt/Jface tableViewer入门教程一(显示tableViewer)
- Swt/Jface tableViewer入门教程2
- Swt/Jface tableviewer入门教程3
- Swt/Jface tableviewer入门教程4
- Swt/Jface tableViewer入门教程一(显示tableViewer)
- Swt/Jface tableViewer入门教程(显示tableViewer) 转 受益匪浅
- Swt/Jface tableViewer入门教程一(显示tableViewer)
- Swt/Jface tableViewer入门教程二(让TableViewer按照列排序)
- SWT/JFACE表格Table可编辑
- ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
- ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑