`
xblia
  • 浏览: 82604 次
  • 性别: 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

 

分享到:
评论

相关推荐

    PyPI 官网下载 | cdk-dynamo-table-view-0.1.100.tar.gz

    此外,cdk-dynamo-table-view可能还提供了其他高级特性,如过滤、排序、搜索等功能,具体用法需查阅官方文档或源代码。 总的来说,cdk-dynamo-table-view库是提升DynamoDB和CDK开发效率的实用工具,它简化了开发者...

    PyPI 官网下载 | cdk-dynamo-table-view-0.1.89.tar.gz

    《PyPI官网下载:深入解析cdk-dynamo-table-view库》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供全球开发者下载和使用。本篇文章将详细探讨PyPI上名为“cdk-dynamo-table-...

    前端开源库-table-view

    - **安装**:首先,你需要通过npm或yarn将"table-view"库引入到项目中,执行`npm install table-view`或`yarn add table-view`。 - **初始化**:在代码中引入库,创建一个表格实例,传入数据数组。 - **配置**:...

    Laravel开发-laravel-table-view

    `laravel-table-view`支持动态搜索和排序功能。通过在控制器中处理这些请求,你可以轻松地在前端实现这些功能。例如,搜索可以这样实现: ```php return DataTables::of(User::query()) -&gt;filter(function ($query...

    bootstraptable-treeview树形,树形空格缩进bug已解决

    BootstrapTable 是一个基于 Bootstrap 框架的前端数据展示插件,它提供了丰富的功能,如分页、排序、过滤和自定义操作等。在本文中,我们将深入探讨 "bootstraptable-treeview",这是一个用于在 BootstrapTable 中...

    Laravel开发-table-view

    总结起来,"Laravel开发-table-view"是Laravel 5开发中的一个实用工具,它通过提供预设的搜索和排序功能,简化了数据展示的复杂性,提升了开发效率。通过正确地集成和配置,可以显著优化数据驱动的Web应用程序的用户...

    Bootstrap Table API 中文版(完整翻译文档)

    还有许多其他属性和方法,如`data-sort-order`来设置排序顺序(升序或降序),`data-filter-control`用于添加过滤控件,`data-detail-view`启用详细视图等。 Bootstrap Table API 提供了丰富的事件,如`...

    Laravel开发-laravel-bootstrap-table-list

    使用laravel-bootstrap-table-list时,开发者需要定义数据模型和关联关系,然后在控制器中处理数据查询,如筛选、排序和分页。最后,在视图文件中,通过调用库提供的函数和方法,结合HTML和 Blade 模板引擎,可以...

    小程序table组件 满足基本需求

    在`&lt;view&gt;`标签内引入`&lt;table&gt;`和`&lt;tr&gt;`、`&lt;td&gt;`等子标签,就可以构建出一个基础的表格结构。 `table`组件的使用方法可以参照链接中的教程:[https://blog.csdn.net/weixin_67585820/article/details/123791822]...

    angularjs ng-table demos

    它以MVC(Model-View-Controller)架构为基础,简化了前端开发流程。`ng-table`是AngularJS的一个插件,主要用于在网页上展示数据,提供了丰富的表格功能和高度可定制化。 `ng-table`插件的主要特点包括: 1. **...

    Laravel开发-table-sorter

    在Laravel框架中,开发一个名为“table-sorter”的包,是为了帮助开发者更方便地在他们的应用程序中实现数据表格的排序功能。这个包的核心目的是简化模型的排序逻辑,并提供生成排序链接的辅助方法,以便用户可以...

    Laravel开发-laravel-table

    return view('users.index', compact('users')); } ``` 2. 视图模板:在Blade模板中,使用循环遍历数据并渲染成表格。 ```html &lt;table&gt; 姓名 邮箱 操作 @foreach ($users as $user) &lt;td&gt;{{ $...

    BootStrapTable实现增删改查

    BootstrapTable是一种基于Bootstrap框架的前端数据展示插件,它提供了丰富的功能,如表格排序、分页、筛选等,使得在网页上创建交互式表格变得简单。在MVC(Model-View-Controller)架构中,结合C#后端,Bootstrap...

    asp.net MVC5 (bootstrap-table+分页+日期控件)

    ASP.NET MVC5是微软推出的一种基于模型-视图-控制器(Model-View-Controller)架构的开发框架,它集成了ASP.NET Web API和ASP.NET Web Pages的功能,提供了一个用于构建高效、可测试和易于维护的Web应用的平台。...

    bootstrap-table 分页Demo

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

    IOS应用源码——视觉效果很好的table view美化效果demo.zip

    在iOS开发中,Table View是常用的UI组件,用于展示列表数据。这个压缩包"IOS应用源码——视觉效果很好的table view美化效果demo.zip"显然包含了某个开发者为了展示优秀视觉效果的TableView实现所编写的源代码示例。...

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

    该插件可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能。同时,该插件也提供了一些不错的扩展功能,如移动行、移动列位置等一些特殊的功能。 二、...

    table 列可左右拖动

    这可以通过MVVM(Model-View-ViewModel)框架,如AngularJS或Vue.js实现,它们可以自动更新表格内容,同时保持列宽的正确。 6. **存储和恢复状态**:为了让用户关闭页面后还能保持自定义的列宽,可以将用户的设置...

Global site tag (gtag.js) - Google Analytics