`
Arizona
  • 浏览: 32246 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)

阅读更多

前边实现了一个表格的基本功能,但这并不够好,能否为表格实现一些更好的功能呢?答案是肯定的。下边我们来加入直接编辑的功能。
一、要实现这个功能必须提供一个实现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这个的目的已经达到了。

 

分享到:
评论
1 楼 zjf_1103 2010-07-21  
所谓的验证器只不过是不易发现的错误验证方法,你可以使用以下方法测试你的验证器:一直按住一个字母,不管它是否显示,然后双击鼠标,看看会有什么效果。
既然是带有限制的输入组件,个人觉得还是赋予用户随便输入的权利,只不过你要多写些验证罢了。

相关推荐

    Swt/Jface tableViewer入门教程一(显示tableViewer)

    Swt(Standard Widget Toolkit)是Java中用于开发原生界面的应用程序开发工具包,而Jface是建立在Swt之上的抽象层,提供了更高级别的控件和数据绑定功能。`tableViewer`是Jface提供的一个强大组件,用于展示和操作...

    swt/jface tableViewer开发简化

    综上所述,SWT/JFace的`tableViewer`开发涉及了GUI设计、数据模型绑定、事件处理和用户交互等多个方面。掌握`tableViewer`的使用对于开发高效、用户友好的桌面应用至关重要。`tableReflectPro`可能提供了一种优化...

    SWT/Jface 开发入门指南

    SWT/Jface开发入门指南是一篇专为初学者编写的教程,旨在帮助他们快速搭建开发环境并掌握使用SWT和JFace编写图形化应用程序的基本技巧。以下是该教程所涵盖的关键知识点: 1. **SWT和JFace简介**: - SWT全称...

    swt/jface中文教程

    SWT/JFace 支持多种平台,如:Windows、Mac、Linux 等,使开发者能够在不同的平台上构建 GUI 应用程序。 SWT 和 JFace 的区别: SWT 和 JFace 是两个不同的类库,但它们都是用于 GUI 开发的。SWT 是一个低级别的...

    SWT/JFace专题 --- SWT/JFace概述

    JFace 建立在SWT之上,提供了一层抽象,简化了GUI开发的复杂性。JFace的目标是通过提供数据绑定、视图模型、对话框和服务等高级构造,来提高开发者的生产力。例如,它使用模型-视图-控制器(MVC)架构,将数据管理与...

    SWT/JFace从入门到精通

    - 探索JFace:了解JFace如何简化SWT的使用,如利用TreeViewer和TableViewer展示数据。 - 练习MVC:通过创建一个简单的数据编辑视图,实践JFace的MVC模式。 - 扩展Eclipse:学习如何创建Eclipse插件,将SWT/JFace...

    swt/jface.jar

    JFace是建立在SWT之上的高级UI框架,简化了UI组件的创建和管理,提供了数据绑定、事件处理和视图模型等高级功能。 描述中提到的"swt/Jface用到的最基本的jar包"暗示了这个jar文件是构建基于SWT和JFace的应用程序的...

    SWT/Jface API 3.4

    SWT 是一个直接与操作系统进行交互的底层库,提供了丰富的控件和组件,而 JFace 建立在 SWT 之上,提供了一层抽象,简化了 GUI 的设计和实现,使其更易于管理和维护。 在 SWT/Jface API 3.4 版本中,我们关注以下几...

    SWT/JFACE客户端登录窗口例子

    JFace 则是建立在 SWT 之上的高级抽象层,它简化了界面设计,减少了代码量,让开发者更加专注于业务逻辑。 在这个“SWT/JFACE 客户端登录窗口例子”中,我们可以预期会看到如何使用这两个库来创建一个基本的登录...

    eclipse swt/jface核心应用源码

    5. 表格和树的模型(Table and Tree Models):SWT和JFace提供了处理表格和树数据的类,如`TableViewer`和`TreeViewer`,它们支持数据的过滤、排序和分页。 6. 事件处理(Event Handling):SWT和JFace使用监听器...

    Eclipse SWT/JFace 核心应用 带书签

    Eclipse SWT/JFace 核心应用 带书签 Eclipse SWT/JFace

    SWT/JFace开发实例

    SWT/JFace开发实例

    Eclipse SWT/JFace 核心应用光盘源码

    JFace则是建立在SWT之上的一个高级UI框架,它简化了SWT的使用,提供了数据绑定、对话框、视图、表和树等控件的抽象。JFace通过模型-视图-控制器(MVC)的设计模式,帮助开发者更好地组织代码,减少重复工作,并且...

    swt/jface in action +中文版+英文版+源码 下载

    JFace则是建立在SWT之上的更高层次的抽象,旨在简化GUI开发。它通过提供模型-视图-控制器(MVC)架构,减少代码量并提高可维护性。JFace包括诸如视图、编辑器、对话框、表和树等组件,以及事件处理机制,使开发者能...

    SWT/JFACE API

    SWT是底层的UI库,提供了与操作系统原生控件直接交互的能力,而JFace是在SWT基础上提供的一层抽象,简化了UI开发并引入了模型-视图-控制器(MVC)设计模式。 **SWT API** SWT是IBM开发的一个轻量级GUI库,它直接与...

    swt/jface实例开发

    而JFace则在SWT的基础上构建了一个更高层次的抽象,简化了GUI的开发,特别是数据绑定和视图模型的管理。 SWT的核心特性包括: 1. **原生控件**:SWT通过JNI(Java Native Interface)直接调用操作系统提供的API,...

    SWT/JFace学习文档

    JFace则是建立在SWT之上的一个高级UI框架,它简化了SWT的使用,提供了数据绑定、视图模型以及事件处理机制,使开发者能够更专注于业务逻辑而不是UI细节。 1.2 SWT/JFACE 与 SWING 的特点及区别 1.2.1 Swing的特点 ...

    SWT/JFace开发入门指南

    - 本指南旨在为初学者提供一个入门级别的教程,帮助他们理解 SWt 和 JFace 的基本概念、开发流程和实践技巧。 #### 二、SWT/JFace 开发环境搭建 - **目标**: 介绍如何设置 SWt 和 JFace 的开发环境,确保开发者...

Global site tag (gtag.js) - Google Analytics