前边实现了一个表格的基本功能,但这并不够好,能否为表格实现一些更好的功能呢?答案是肯定的。下边我们来加入直接编辑的功能。
一、要实现这个功能必须提供一个实现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(Standard Widget Toolkit)是Java中用于开发原生界面的应用程序开发工具包,而Jface是建立在Swt之上的抽象层,提供了更高级别的控件和数据绑定功能。`tableViewer`是Jface提供的一个强大组件,用于展示和操作...
综上所述,SWT/JFace的`tableViewer`开发涉及了GUI设计、数据模型绑定、事件处理和用户交互等多个方面。掌握`tableViewer`的使用对于开发高效、用户友好的桌面应用至关重要。`tableReflectPro`可能提供了一种优化...
SWT/Jface开发入门指南是一篇专为初学者编写的教程,旨在帮助他们快速搭建开发环境并掌握使用SWT和JFace编写图形化应用程序的基本技巧。以下是该教程所涵盖的关键知识点: 1. **SWT和JFace简介**: - SWT全称...
SWT/JFace 支持多种平台,如:Windows、Mac、Linux 等,使开发者能够在不同的平台上构建 GUI 应用程序。 SWT 和 JFace 的区别: SWT 和 JFace 是两个不同的类库,但它们都是用于 GUI 开发的。SWT 是一个低级别的...
JFace 建立在SWT之上,提供了一层抽象,简化了GUI开发的复杂性。JFace的目标是通过提供数据绑定、视图模型、对话框和服务等高级构造,来提高开发者的生产力。例如,它使用模型-视图-控制器(MVC)架构,将数据管理与...
- 探索JFace:了解JFace如何简化SWT的使用,如利用TreeViewer和TableViewer展示数据。 - 练习MVC:通过创建一个简单的数据编辑视图,实践JFace的MVC模式。 - 扩展Eclipse:学习如何创建Eclipse插件,将SWT/JFace...
JFace是建立在SWT之上的高级UI框架,简化了UI组件的创建和管理,提供了数据绑定、事件处理和视图模型等高级功能。 描述中提到的"swt/Jface用到的最基本的jar包"暗示了这个jar文件是构建基于SWT和JFace的应用程序的...
SWT 是一个直接与操作系统进行交互的底层库,提供了丰富的控件和组件,而 JFace 建立在 SWT 之上,提供了一层抽象,简化了 GUI 的设计和实现,使其更易于管理和维护。 在 SWT/Jface API 3.4 版本中,我们关注以下几...
JFace 则是建立在 SWT 之上的高级抽象层,它简化了界面设计,减少了代码量,让开发者更加专注于业务逻辑。 在这个“SWT/JFACE 客户端登录窗口例子”中,我们可以预期会看到如何使用这两个库来创建一个基本的登录...
5. 表格和树的模型(Table and Tree Models):SWT和JFace提供了处理表格和树数据的类,如`TableViewer`和`TreeViewer`,它们支持数据的过滤、排序和分页。 6. 事件处理(Event Handling):SWT和JFace使用监听器...
Eclipse SWT/JFace 核心应用 带书签 Eclipse SWT/JFace
SWT/JFace开发实例
JFace则是建立在SWT之上的一个高级UI框架,它简化了SWT的使用,提供了数据绑定、对话框、视图、表和树等控件的抽象。JFace通过模型-视图-控制器(MVC)的设计模式,帮助开发者更好地组织代码,减少重复工作,并且...
JFace则是建立在SWT之上的更高层次的抽象,旨在简化GUI开发。它通过提供模型-视图-控制器(MVC)架构,减少代码量并提高可维护性。JFace包括诸如视图、编辑器、对话框、表和树等组件,以及事件处理机制,使开发者能...
SWT是底层的UI库,提供了与操作系统原生控件直接交互的能力,而JFace是在SWT基础上提供的一层抽象,简化了UI开发并引入了模型-视图-控制器(MVC)设计模式。 **SWT API** SWT是IBM开发的一个轻量级GUI库,它直接与...
而JFace则在SWT的基础上构建了一个更高层次的抽象,简化了GUI的开发,特别是数据绑定和视图模型的管理。 SWT的核心特性包括: 1. **原生控件**:SWT通过JNI(Java Native Interface)直接调用操作系统提供的API,...
JFace则是建立在SWT之上的一个高级UI框架,它简化了SWT的使用,提供了数据绑定、视图模型以及事件处理机制,使开发者能够更专注于业务逻辑而不是UI细节。 1.2 SWT/JFACE 与 SWING 的特点及区别 1.2.1 Swing的特点 ...
- 本指南旨在为初学者提供一个入门级别的教程,帮助他们理解 SWt 和 JFace 的基本概念、开发流程和实践技巧。 #### 二、SWT/JFace 开发环境搭建 - **目标**: 介绍如何设置 SWt 和 JFace 的开发环境,确保开发者...