`
xblia
  • 浏览: 80473 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

table view排序-002

 
阅读更多
您还未登录!|登录|注册|帮助
CSDN首页 资讯 论坛 博客 下载 搜索 更多CTO俱乐部 
学生大本营 
培训充电 
移动开发 
软件研发 
云计算 
程序员 
TUP 

base目录视图 摘要视图 订阅  2011年中国移动开发者大会11月3-4日与您相约北京                         2012年1月微软MVP申请开始了!
CSDN博客“准专家勋章”“微软MVP勋章”上线公告                                  “IT适合你吗?”智力挑战 
RCP TableViewer编程详细 
分类: RCP 2011-08-08 09:18 55人阅读 评论(0) 收藏 举报 
  
一.        创建表格

1.       setContentProvider 主要功能:把数据转换为表格需要的数据模型,这里转换为数组。

2.       setLabelProvider 主要功能:设置每个单元格显示的文本和图片。

3.       setInput 主要功能:提供数据

 

整体上的工作过程是:setInput()提供数据,setContentProvider()把setInput()提供的数据转换为表格能用的数据类型:数组,setLabelProvider()把这些数据按照我们想要的形式显示出来。他们三者遵照MVC思想。

 

二.       为表格增加功能

1.    右键菜单

1.1    创建MenuManager()

1.2    设置为表格的contextMenu

2.    排序

2.1 调用TableViewer方法setSorter(Sorter sorter)为表格设置排序。

2.2 调用sorter.doSort(int column);触发排序。

3.    编辑单元格内容

3.1    setColumnProperties 主要功能:给每个列设置一个属性,相当于设置了一个名字

3.2    setCellEditors 主要功能:设置每列的单元格是什么类型的编辑框,比如文本框,组合框,下拉框。

3.3    setCellModifier 主要功能:设置当前单元格是否可编辑,改变后的值怎么处理等等。

4.    增加表格过滤

4.1 addFilter(ViewerFilter filter);

三. 其他

       1. 表格中增加一行记录的方法:

TableViewer和数据模型(本例中的是List对象)中都能够增加删除一条记录,区别在于TableViewer中的方法只是在对显示界面的数据进行操作,并为改变数据模型中的数据;而直接在数据模型中增删数据需要调用TableViewer的refresh()方法才能显示出增删的数据。

       2.TableViewer的update()方法与refresh()方法的区别:

前者假定输入模型结构不变,后者认为输入模型结构发生变化;所以优先调用前者,减少系统开销。

    3. TableColumn类:

它用来设置表格的title,它和表格的body是分开创建的,而且树也可以创建树的title,使用TreeColumn类,这时的树就是 表格树。

    4. 如何改变表格的行高:

可以通过设置单元格图片的方式,间接的使单元格变高。

 

四.主要代码示例

1. 主类

/**

 * @description:

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020 

 */

public class MyEditor extends EditorPart {

 

    public static final String ID = "rcptest.editors.MyEditor";

    public static final String[] COLUMN_NAME = { "ID", "NAME", "SEX", "COLOR" };

    private TableViewer table;

    private List persons;

 

    public MyEditor() {

        super();

    }

 

    @Override

    public void doSave(IProgressMonitor monitor) {

        // TODO Auto-generated method stub

 

    }

 

    @Override

    public void doSaveAs() {

        // TODO Auto-generated method stub

 

    }

 

    @Override

    public void init(IEditorSite site, IEditorInput input) throws PartInitException {

        // TODO Auto-generated method stub

        this.setSite(site);

        this.setInput(input);

        this.setPartName(input.getName());

 

    }

 

    @Override

    public boolean isDirty() {

        // TODO Auto-generated method stub

        return false;

    }

 

    @Override

    public boolean isSaveAsAllowed() {

        // TODO Auto-generated method stub

        return false;

    }

 

    //创建表格的代码

    @Override

    public void createPartControl(Composite parent) {

        // TODO Auto-generated method stub

        persons = new ArrayList();

        persons.add(new PersonEO(1, "你好", "man", "black"));

        persons.add(new PersonEO(2, "wang", "man", "black"));

 

        table = new TableViewer(parent, SWT.FULL_SELECTION);

        for (int i = 0; i < 4; i++) {

            new TableColumn(table.getTable(), SWT.LEFT).setText("title" + i);

 

            table.getTable().getColumn(i).pack();

        }

        table.getTable().setHeaderVisible(true);

        table.getTable().setLinesVisible(true);

        table.setContentProvider(new MyContentProvider());

        table.setLabelProvider(new MyLabelProvider());

        table.setInput(persons);

 

        // add context menu

        this.createContextMenu();

 

        // enable table edit

        this.editor();

 

        // add sortor

        this.sorter();

    }

 

    private void sorter() {

        table.setSorter(new Sorter());

        TableColumn column = table.getTable().getColumn(0);

        column.addSelectionListener(new SelectionListener() {

 

            public void widgetDefaultSelected(SelectionEvent e) {

                // TODO Auto-generated method stub

 

            }

 

            public void widgetSelected(SelectionEvent e) {

                // TODO Auto-generated method stub

                ((Sorter) table.getSorter()).doSort(1);

                table.refresh();

            }

 

        });

    }

 

    private void editor() {

        table.setColumnProperties(COLUMN_NAME);

        CellEditor[] editors = new CellEditor[4];

        editors[0] = new TextCellEditor(table.getTable());

        editors[1] = new TextCellEditor(table.getTable());

        editors[2] = new TextCellEditor(table.getTable());

        editors[3] = new TextCellEditor(table.getTable());

 

        table.setCellEditors(editors);

        table.setCellModifier(new TableCellModifier());

    }

 

    private void createContextMenu() {

        MenuManager menu = new MenuManager();

        menu.add(new AddAction(table, persons));

        menu.add(new DelAction(table));

        menu.add(new RefreshAction(table));

        menu.add(new FileterAction(table));

        Menu m = menu.createContextMenu(table.getControl());

        table.getTable().setMenu(m);

 

    }

 

    @Override

    public void setFocus() {

        // TODO Auto-generated method stub

 

    }

 

    class MyContentProvider implements IStructuredContentProvider {

 

        public Object[] getElements(Object inputElement) {

            // TODO Auto-generated method stub

            return ((List) inputElement).toArray();

        }

 

        public void dispose() {

            // TODO Auto-generated method stub

 

        }

 

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

            // TODO Auto-generated method stub

 

        }

 

    }

 

    class MyLabelProvider implements ITableLabelProvider {

 

        public Image getColumnImage(Object element, int columnIndex) {

            // TODO Auto-generated method stub

 

            return null;

        }

 

        public String getColumnText(Object element, int columnIndex) {

            // TODO Auto-generated method stub

            PersonEO person = (PersonEO) element;

            if (columnIndex == 0)

                return person.getID() + "";

            if (columnIndex == 1)

                return person.getName();

            if (columnIndex == 2)

                return person.getGender();

            if (columnIndex == 3)

                return person.getColor();

 

            return null;

        }

 

        public void addListener(ILabelProviderListener listener) {

            // TODO Auto-generated method stub

 

        }

 

        public void dispose() {

            // TODO Auto-generated method stub

 

        }

 

        public boolean isLabelProperty(Object element, String property) {

            // TODO Auto-generated method stub

            return false;

        }

 

        public void removeListener(ILabelProviderListener listener) {

            // TODO Auto-generated method stub

 

        }

 

    }

}

 

2. 排序类

/**

 * @description:

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020 

 */

public class Sorter extends ViewerSorter {

    private static final int ASC = 0;

    private static final int DES = 1;

    private int order;

    private int column;

 

    public void doSort(int column) {

        if (column == this.column)

            order = 1 - order;

        else {

            this.column = column;

            order = DES;

        }

 

    }

 

    @Override

    protected Comparator getComparator() {

        // TODO Auto-generated method stub

        return super.getComparator();

    }

 

    public int compare(Viewer viewer, Object e1, Object e2) {

        int result = 0;

        PersonEO p1 = (PersonEO) e1;

        PersonEO p2 = (PersonEO) e2;

        switch (column) {

        case 1:

            result = p1.getID() > p2.getID() ? 1 : -1;

            break;

        case 2:

            result = collator.compare(p1.getName(), p2.getName());

            break;

        case 3:

            result = collator.compare(p1.getGender(), p2.getGender());

            break;

        case 4:

            result = collator.compare(p1.getColor(), p2.getColor());

            break;

        }

 

        if (order == DES)

            result = -result;

 

        return result;

    }

}

 

3. CellModifier类

/**

 * @description: 编辑单元格内容

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020 

 */

public class TableCellModifier implements ICellModifier{

 

    public boolean canModify(Object element, String property) {

        // TODO Auto-generated method stub

        return true;

    }

 

    public Object getValue(Object element, String property) {

        // TODO Auto-generated method stub

        return "...";

    }

 

    public void modify(Object element, String property, Object value) {

        // TODO Auto-generated method stub

        

    }

    

}

 

4. filter类

/**

 * @description:表格过滤

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020

 */

public class FileterAction extends Action {

 

    ViewerFilter filter;

    TableViewer table;

 

    public FileterAction(TableViewer table){

        this.table = table;

        this.setText("filter");

        filter = new ViewerFilter(){

 

            @Override

            public boolean select(Viewer viewer, Object parentElement, Object element) {

                // TODO Auto-generated method stub

                PersonEO p = (PersonEO)element;

                return p.getGender().equals("women");

               

            }

 

        };

        this.setChecked(false);

    }

    

    public void run(){

        if(this.isChecked())

            table.addFilter(filter);

        else

            table.removeFilter(filter);

        table.refresh();

    }

}

分享到: 上一篇:Eclipse RCP 之屏蔽视图上的右键菜单 
下一篇:swt/jface 自定义 Dialog 

查看评论

  暂无评论


您还没有登录,请[登录]或[注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
个人资料 

basenet855x
 
访问:1068次 
积分:142分 
排名:千里之外 
原创:9篇 转载:30篇 译文:0篇 评论:0条 文章搜索    文章分类RCP(24) 
java核心(10) 
java扩展(2) 
随笔(0) 
设计模式(2) 
数据库(2) 
文章存档2011年09月(7)2011年08月(33) 
阅读排行SWT/JFace 按键、事件、监听 (61) 
RCP TableViewer编程详细 (54) 
Swt/Jface的dialog 分类总... (32) 
在Eclipse RCP 设置表格的行高... (31) 
Eclipse RCP中控制Editor... (24) 
Eclipse RCP 开发中的常见问题 (23) 
Eclipse RCP 中的常用小技巧 (22) 
synchronized的作用 (21) 
swt/jface 自定义 Dialog (19) 
oracle 中GROUP BY的用法 (19) 
评论排行设计模式——单例 (0) 
java异常管理 (0) 
如何使swt窗口居中显示 (0) 
oracle 中GROUP BY的用法 (0) 
System.getProperty参数... (0) 
Class.forName(String... (0) 
java线程编程中 interrupt ... (0) 
synchronized的作用 (0) 
java中不常见的关键字:strictf... (0) 
Java初始化顺序 (0) 
  
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
 Email:webmaster@csdn.net
Copyright ? 1999-2011, CSDN.NET, All Rights Reserved

 

分享到:
评论

相关推荐

    Laravel开发-laravel-table-view

    Laravel开发-laravel-table-view Laravel 5软件包,用于轻松显示具有内置搜索和排序功能的雄辩集合的表视图。

    Laravel开发-table-view

    Laravel开发-table-view Laravel 5软件包,用于轻松显示具有内置搜索和排序功能的雄辩集合的表视图。

    bootstrap-table 分页Demo

    Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...

    仿淘宝商城table滚动全屏效果

    table向上滚动,则显示导航栏和排序bar。如果向下滚动,则隐藏导航栏和排序bar,使表格全屏显示。 参考了YIFullScreenScroll的实现,但是这个有一个问题,就是很难加上排序bar的隐藏和显示。而且有很多bug,比如在...

    Bootstrap-table依赖包

    Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...

    TableTree4J

    TableTree4J 是一个开源的基于javascript的树状菜单和表格控件 使用TableTree4J可以轻易实现带树状折叠效果的表格和树状折叠菜单 目前TableTree4J版本为1.1Re版,支持一下功能 1.多种模式切换,样式更改...

    JS组件Bootstrap Table使用方法详解

    JS组件Bootstrap Table使用方法详解 转载 2016年03月21日 15:06:09 标签: Bootstrap Table 最近客户提出需求,想将原有的管理系统,做下优化,通过手机也能很好展现,想到2个方案: a方案:保留原有的页面,新设计...

    bootstrap-table分别实现前端和后端的分页项目

    Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...

    react-table-example:具有Typescript和Material-UI的React-Table v7

    使用TypeScript和Material UI的React Table V7演示 yarn和yarn start运行并编辑示例 本示例使用: useGroupBy启用标题组 用于每个列过滤器的useFilters 。 请注意,过滤器显示在单独的过滤器下拉列表中,而不是嵌入...

    使用bootstraptable插件实现表格记录的查询、分页、排序操作

    Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...

    ASP.Net MVC+Data Table实现分页+排序功能的方法

    本文实例讲述了ASP.Net MVC+Data Table实现分页+排序功能的方法。分享给大家供大家参考,具体如下: 实现思路: 使用datatable内置的分页,排序 使用attribute+反射来控制需要排序和显示的字段以及顺序 分离排序和...

    table-view:用标准JavaScript编写的自动表更新程序(在不赞成使用Object.observe之前编写)

    table-view.js 用标准JavaScript编写的自动表更新程序。 设计用于移动设备的紧凑型解决方案。 在压缩格式下,此功能丰富的脚本只有10 KB。 考虑到搜索引擎的可见性,可以从其主体的现有内容初始化该表。 还有一个...

    精髓Oralcle讲课笔记

    --(按照多个字段排序 首先按照deptno升序排列,当detpno相同时,内部再按照ename的降序排列) 29、select lower(ename) from emp; --(函数lower() 将ename搜索出来后全部转化为小写); 30、select ename from emp...

    一个ViewGrid控件

    2、对多个字段进行复合排序;升序、降序的排序状态提示 使用方法(设置SmartSorting复合属性): AllowSortTip - 是否启用排序提示 AllowMultiSorting - 是否启用复合排序 SortAscImageUrl - 升序提示图片的URL...

    一秒学会微信小程序制作table表格

    大家都知道微信小程序自身没有提供表格这个... &lt;view class=table&gt; &lt;view class=tr&gt; &lt;view class=th&gt;日期&lt;/view&gt; &lt;view class=th&gt;时间&lt;/view&gt; &lt;view class=th&gt;伤害&lt;/view&gt; &lt;/view&gt; &lt;view class=tr wx:for={{1

    数据库基本----SQL语句大全

    排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 ...

    weWork-crx插件

    * V2.1.1 - "Table View" 改为下拉菜单,在 Hotel Sprint 中加各端的 Table View。* V2.1.0 - 加 "Table View - App"。* V2.0.3 - 一键解决变成实时效果。* V2.0.2 - 修改bug。* V2.0.1 - 按钮按下效果颜色修改。* V...

    ajaxtable:用于表显示的Ajax包装器,用于排序和分页

    ajaxtable 用于表显示的Ajax包装器,用于排序和分页 安装 所需文件已添加 ... 'data'=&gt;View::make('just_table_rows_views', compact('collection'))-&gt;render(), 'pagination'=&gt; (string) $collection-&gt;links

    SQL语句大全(经典珍藏版)

    排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 ...

Global site tag (gtag.js) - Google Analytics