您还未登录!|登录|注册|帮助
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 5软件包,用于轻松显示具有内置搜索和排序功能的雄辩集合的表视图。
Laravel开发-table-view Laravel 5软件包,用于轻松显示具有内置搜索和排序功能的雄辩集合的表视图。
Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...
table向上滚动,则显示导航栏和排序bar。如果向下滚动,则隐藏导航栏和排序bar,使表格全屏显示。 参考了YIFullScreenScroll的实现,但是这个有一个问题,就是很难加上排序bar的隐藏和显示。而且有很多bug,比如在...
Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...
TableTree4J 是一个开源的基于javascript的树状菜单和表格控件 使用TableTree4J可以轻易实现带树状折叠效果的表格和树状折叠菜单 目前TableTree4J版本为1.1Re版,支持一下功能 1.多种模式切换,样式更改...
JS组件Bootstrap Table使用方法详解 转载 2016年03月21日 15:06:09 标签: Bootstrap Table 最近客户提出需求,想将原有的管理系统,做下优化,通过手机也能很好展现,想到2个方案: a方案:保留原有的页面,新设计...
Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...
使用TypeScript和Material UI的React Table V7演示 yarn和yarn start运行并编辑示例 本示例使用: useGroupBy启用标题组 用于每个列过滤器的useFilters 。 请注意,过滤器显示在单独的过滤器下拉列表中,而不是嵌入...
Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、...
本文实例讲述了ASP.Net MVC+Data Table实现分页+排序功能的方法。分享给大家供大家参考,具体如下: 实现思路: 使用datatable内置的分页,排序 使用attribute+反射来控制需要排序和显示的字段以及顺序 分离排序和...
table-view.js 用标准JavaScript编写的自动表更新程序。 设计用于移动设备的紧凑型解决方案。 在压缩格式下,此功能丰富的脚本只有10 KB。 考虑到搜索引擎的可见性,可以从其主体的现有内容初始化该表。 还有一个...
--(按照多个字段排序 首先按照deptno升序排列,当detpno相同时,内部再按照ename的降序排列) 29、select lower(ename) from emp; --(函数lower() 将ename搜索出来后全部转化为小写); 30、select ename from emp...
2、对多个字段进行复合排序;升序、降序的排序状态提示 使用方法(设置SmartSorting复合属性): AllowSortTip - 是否启用排序提示 AllowMultiSorting - 是否启用复合排序 SortAscImageUrl - 升序提示图片的URL...
大家都知道微信小程序自身没有提供表格这个... <view class=table> <view class=tr> <view class=th>日期</view> <view class=th>时间</view> <view class=th>伤害</view> </view> <view class=tr wx:for={{1
排序: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 ...
* 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包装器,用于排序和分页 安装 所需文件已添加 ... 'data'=>View::make('just_table_rows_views', compact('collection'))->render(), 'pagination'=> (string) $collection->links
排序: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 ...