- 浏览: 7332466 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在项目你可能为多个TableViewer编写多个IContentProvider和多个ILabelProvider ,那么可以采用注解方式减少。TableViewer这些辅助类的编写。(备注源码转载的,在此谢谢源码作者 solonote )
这用注解方式类似Hibernate中注解应用消除了xml的描述作用。
注解代码重点如下:
一自定义注解类:
import java.lang.annotation.*; /** * 表格中一列的注解 * @author solonote * @version 0.1.0 2007-12-17 下午05:16:26 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ColumnAnnotation { /** * 返回表头 * @return 表头 */ String header(); /** * 返回列宽 * @return 列宽 */ int width(); /** * 返回图片所在的BundleId 如果length=0 则不在Bundle中查找图片 * @return 图片所在的BundleId 如果length=0 则不在Bundle中查找图片 */ String imageBundleId() default(""); /** * 返回图片的url 如果length=0 则不存在图片 * @return 图片的url 如果length=0 则不存在图片 */ String imangURL() default(""); /** * 返回是否排序 * @return 是否排序 */ boolean isSort() default(true); }
获取各类中对应表各类的注解
/** * * @param tClass * @return * @throws SecurityException * @throws NoSuchMethodException */ private List<IColumn> createCloumnList(final Class<?> tClass) throws SecurityException, NoSuchMethodException { List<IColumn> columnL = new ArrayList<IColumn>(); for (Field f : tClass.getDeclaredFields()) { if (f.isAnnotationPresent(ColumnAnnotation.class)) { Column column = new Column(); ColumnAnnotation annotation = f.getAnnotation(ColumnAnnotation.class); column.setHeader(annotation.header()); column.setWidth(annotation.width()); column.setImageBundleId(annotation.imageBundleId()); column.setImageURL(annotation.imangURL()); column.setSort(annotation.isSort()); Method m = tClass.getMethod(toGetMethodString(f.getName())); setGetValueStrategy(m,column); if(column.isSort()) { setCompareStrategy(m,column); } columnL.add(column); } } return columnL; }
看看源码:
定义一个比较器接口:
package solonote.common.swt.table; /** * * @author longgangbai * */ public interface IColumnCompareStrategy { public int compare(Object obj1, Object obj2); } 定义一个获取值的策略: package solonote.common.swt.table; /** * 列显示内容的策略 * @author solonote * @version 0.1.0 2007-12-17 上午11:39:14 */ public interface IColumnGetValueStrategy { public String getVlaue(Object obj); } package solonote.common.swt.table; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import solonote.common.swt.ImageResource; /** * 表中的一列的属性模型 * @author longgangbai * */ public class Column implements IColumn{ /** * 列标题 */ private String header; /** * 列宽 */ private int width; /** * 列的图片资源所在的Bundle的Id */ private String imageBundleId; /** * 列的图片资源URL */ private String imageURL; /** * 是否排序 */ private boolean isSort; /** * 列显示内容的策略 */ private IColumnGetValueStrategy columnGetValueStrategy; /** * 列比较方法的策略 */ private IColumnCompareStrategy columnCompareStrategy; /** * @see solonote.common.swt.table.IColumn#getValue(java.lang.Object) */ public String getValue(Object obj) { if(columnGetValueStrategy != null) return columnGetValueStrategy.getVlaue(obj); else return ""; } /** * @see solonote.common.swt.table.IColumn#compare(java.lang.Object, java.lang.Object) */ public int compare(Object obj1, Object obj2) { if(columnCompareStrategy != null) return columnCompareStrategy.compare(obj1, obj2); else return 0; } /** * @see solonote.common.swt.table.IColumn#getImage() */ public Image getImage(){ if(imageURL.length() == 0) return null; try{ if(imageBundleId.length() == 0) return ImageResource.getImage(Display.getDefault(),imageURL); return ImageResource.getBundleImage(imageBundleId, imageURL); }catch(Exception e) { return null; } } /** * @see solonote.common.swt.table.IColumn#getHeader() */ public String getHeader() { return header; } /** * 设置列标题 * @param header 列标题 */ public void setHeader(String header) { this.header = header; } /** * @see solonote.common.swt.table.IColumn#getWidth() */ public int getWidth() { return width; } /** * 设置列宽 * @param width 列宽 */ public void setWidth(int width) { this.width = width; } /** * 返回列的图片资源所在的Bundle的Id * @return 列的图片资源所在的Bundle的Id */ public String getImageBundleId() { return imageBundleId; } /** * 设置列的图片资源所在的Bundle的Id * @param imageBundleId 列的图片资源所在的Bundle的Id */ public void setImageBundleId(String imageBundleId) { this.imageBundleId = imageBundleId; } /** * 返回列的图片资源URL * @return 列的图片资源URL */ public String getImageURL() { return imageURL; } /** * 设置列的图片资源URL * @param imageURL 列的图片资源URL */ public void setImageURL(String imageURL) { this.imageURL = imageURL; } /** * 返回列显示内容的策略 * @return 列显示内容的策略 */ public IColumnGetValueStrategy getColumnGetValueStrategy() { return columnGetValueStrategy; } /** * 设置列显示内容的策略 * @param columnGetValueStrategy 列显示内容的策略 */ public void setColumnGetValueStrategy( IColumnGetValueStrategy columnGetValueStrategy) { this.columnGetValueStrategy = columnGetValueStrategy; } /** * 返回列比较方法的策略 * @return 列比较方法的策略 */ public IColumnCompareStrategy getColumnCompareStrategy() { return columnCompareStrategy; } /** * 设置列比较方法的策略 * @param columnCompareStrategy 列比较方法的策略 */ public void setColumnCompareStrategy( IColumnCompareStrategy columnCompareStrategy) { this.columnCompareStrategy = columnCompareStrategy; } /** * @see solonote.common.swt.table.IColumn#isSort() */ public boolean isSort() { return isSort; } /** * 设置是否排序 * @param isSort 是否排序 */ public void setSort(boolean isSort) { this.isSort = isSort; } }
package solonote.common.swt.table; import java.lang.annotation.*; /** * 表格中一列的注解 * ( * @Retention(RetentionPolicy.RUNTIME) * @Target(ElementType.FIELD) * public @interface ColumnAnnotation * * @Retention(RetentionPolicy.RUNTIME) 由此可以看出此处在运行时将注解进行编译的 , * @Target(ElementType.FIELD) 说明此处仅仅针对表中列的 * ) * @author longgangbai */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ColumnAnnotation { /** * 返回表头 * @return 表头 */ String header(); /** * 返回列宽 * @return 列宽 */ int width(); /** * 返回图片所在的BundleId 如果length=0 则不在Bundle中查找图片 * @return 图片所在的BundleId 如果length=0 则不在Bundle中查找图片 */ String imageBundleId() default(""); /** * 返回图片的url 如果length=0 则不存在图片 * @return 图片的url 如果length=0 则不存在图片 */ String imangURL() default(""); /** * 返回是否排序 * @return 是否排序 */ boolean isSort() default(true); }
package solonote.common.swt.table; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; /** * 注解的一个工具类 * @author longgangbai * */ public class ColumnAnnotationFactory { /** * 定义类对应的类的Map */ private HashMap<Class<?>,List<IColumn>> columnMap; /** * * @param key 需要获取的类 * @return 获取相关的列 * @throws SecurityException * @throws NoSuchMethodException */ public List<IColumn> getCloumnList(Class<?> key) throws SecurityException, NoSuchMethodException { if(getColumnMap().containsKey(key)) return getColumnMap().get(key); List<IColumn> columnL = createCloumnList(key); getColumnMap().put(key, columnL); return columnL; } /** * * @param key * @return * @throws SecurityException * @throws NoSuchMethodException */ public IColumn[] getCloumnArray(Class<?> key) throws SecurityException, NoSuchMethodException { List<IColumn> columnL = getCloumnList(key); IColumn[] columns = new IColumn[columnL.size()]; //下面代码可以用一下代码替换,为了保持原著没有替换 //columnL.toArray(columns); //针对 原 author solonote本人认为建议如果采用遍历需要索引尽量采用 //for(int i=0;i<N ;i++) 下面这种有点费事 int i = 0; for(IColumn column : columnL) { columns[i] = column; i++; } return columns; } /** * 获取一个对应的各列的注解信息 * @param tClass * @return * @throws SecurityException * @throws NoSuchMethodException */ private List<IColumn> createCloumnList(final Class<?> tClass) throws SecurityException, NoSuchMethodException { List<IColumn> columnL = new ArrayList<IColumn>(); for (Field f : tClass.getDeclaredFields()) { if (f.isAnnotationPresent(ColumnAnnotation.class)) { Column column = new Column(); ColumnAnnotation annotation = f.getAnnotation(ColumnAnnotation.class); column.setHeader(annotation.header()); column.setWidth(annotation.width()); column.setImageBundleId(annotation.imageBundleId()); column.setImageURL(annotation.imangURL()); column.setSort(annotation.isSort()); Method m = tClass.getMethod(toGetMethodString(f.getName())); setGetValueStrategy(m,column); //如果需要排序设置排序的策略 if(column.isSort()) { setCompareStrategy(m,column); } columnL.add(column); } } return columnL; } /** * 如果需要排序设置排序的策略 * 备注:这里貌似有点局限性一般看应用程序的格式,添加相关类型的判断(忽略) * @param m * @param column */ private void setCompareStrategy(final Method m,Column column) { column.setColumnCompareStrategy(new IColumnCompareStrategy(){ public int compare(Object obj1, Object obj2) { try { Object field1 = m.invoke(obj1); Object field2 = m.invoke(obj2); if(field1 instanceof Date && field2 instanceof Date) { Date date1 = (Date) field1; Date date2 = (Date) field2; if(date1.getTime() > date2.getTime()) return 1; else if(date1.getTime() == date2.getTime()) return 0; else return -1; } else if(field1 instanceof Number && field2 instanceof Number) { Number number1 = (Number) field1; Number number2 = (Number) field2; if(number1.doubleValue() > number2.doubleValue()) return 1; else if(number1.doubleValue() == number2.doubleValue()) return 0; else return -1; } return (field1.toString()).compareTo((field2.toString())); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return 0; } }); } /** * 获取数据的策略 * @param m * @param column */ private void setGetValueStrategy(final Method m, Column column) { column.setColumnGetValueStrategy(new IColumnGetValueStrategy(){ public String getVlaue(Object obj) { try { Object value = m.invoke(obj); if(value != null) return value.toString(); else return ""; } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return ""; } }); } /** * * @param fieldName * @return */ private String toGetMethodString(String fieldName) { char first = Character.toUpperCase(fieldName.charAt(0)); return "get" + first + fieldName.substring(1); } /** * * @return */ private HashMap<Class<?>, List<IColumn>> getColumnMap() { if(columnMap == null) columnMap = new HashMap<Class<?>,List<IColumn>>(); return columnMap; } }
package solonote.common.swt.table; import org.eclipse.swt.graphics.Image; /** * 表中一列的接口 * @author longgangbai * */ public interface IColumn { /** * 返回指定泛型对象此列的值 * @param obj 指定泛型对象 * @return 指定泛型对象此列的值 */ public abstract String getValue(Object obj); /** * 比较两个对象此列的大小 * @param obj1 对象1 * @param obj2 对象2 * @return * <li> 对象1 > 对象2 返回正数 * <li> 对象1 = 对象2 返回0 * <li> 对象1 < 对象2 返回负数 */ public abstract int compare(Object obj1, Object obj2); /** * 返回列图标 * @return 列图标 */ public abstract Image getImage(); /** * 返回列标题 * @return 列标题 */ public abstract String getHeader(); /** * 返回列宽 * @return 列宽 */ public abstract int getWidth(); /** * 返回是否排序 * @return 是否排序 */ public boolean isSort(); }
package solonote.common.swt.table; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; /** * 一个可重用TableViewer * @author longgangbai * */ public class STableViewer extends TableViewer{ /** * 表的每一列 */ private IColumn[] columns; /** * 表中列排序的策略 */ private TableSorter tableSorter; /** * 构造器 * @param table */ public STableViewer(IColumn[] columns,Table table) { super(table); this.columns = columns; //创建表中的每一列 createTableColumns(); setLabelProvider(new TableLabelProvider(columns)); this.tableSorter = new TableSorter(); setSorter(tableSorter); this.setContentProvider(new ArrayContentProvider()); } /** * 创建表中的每一列 */ private void createTableColumns() { Table table = getTable(); for(IColumn column : columns) { final TableColumn tableColumn = new TableColumn(table, SWT.NONE); tableColumn.setWidth((int)(column.getWidth())); tableColumn.setText(column.getHeader()); tableColumn.setData(column); if(column.isSort()) tableColumn.addSelectionListener(new RowSelectionListener(column)); } } /** * 列点击事件监听器 * @author longgangbai * */ private class RowSelectionListener extends SelectionAdapter { private IColumn column; public RowSelectionListener(IColumn column) { this.column = column; } public void widgetSelected(SelectionEvent e) { tableSorter.doSort(column); Table table = getTable(); TableColumn tableColumn= (TableColumn) e.widget; table.setSortColumn(tableColumn); if (tableSorter.isDescend()) table.setSortDirection(SWT.UP); else table.setSortDirection(SWT.DOWN); refresh(); } } }
package solonote.common.swt.table; import org.eclipse.swt.widgets.Table; /** * @author longgangbai * */ public class STableViewerFactroy { /** * 通过注解构造IColumn的工厂 */ private ColumnAnnotationFactory columnAnnotationFactory; /** * 通过指定table和指定DTO Class类型创建一个STableViewer * @param table 指定table * @param tClass 这个表格要显示的内容DTO * @return 指定table创建的STableViewer * @throws Exception 创建过程中产生的异常 */ public STableViewer createSTableViewer(Table table,Class<?> tClass) throws Exception { IColumn[] columns = columnAnnotationFactory.getCloumnArray(tClass); return new STableViewer(columns,table); } /** * 返回通过注解构造IColumn的工厂 * @return 通过注解构造IColumn的工厂 */ public ColumnAnnotationFactory getColumnAnnotationFactory() { return columnAnnotationFactory; } /** * 设置通过注解构造IColumn的工厂 * @param columnAnnotationFactory 通过注解构造IColumn的工厂 */ public void setColumnAnnotationFactory( ColumnAnnotationFactory columnAnnotationFactory) { this.columnAnnotationFactory = columnAnnotationFactory; } }
package solonote.common.swt.table; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; /** * 表中一行的显示策略 * @author longgangbai * */ public class TableLabelProvider extends LabelProvider implements ITableLabelProvider { /** * 表中的每一列 */ private IColumn[] columns; /** * 构造器 * @param columns */ public TableLabelProvider(IColumn[] columns) { super(); this.columns = columns; } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { return columns[columnIndex].getImage(); } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { return columns[columnIndex].getValue(element); } }
package solonote.common.swt.table; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.Table; /** * Render 根据注解过的DTO类型创建指定Table的TableViewer * @author longgangbai * */ public class TableRender { /** * 创建TableViewer的工厂 */ private static STableViewerFactroy tableFactory; /** * 根据注解创建Cloumn的工厂 */ private static ColumnAnnotationFactory columnFactory; /** * 根据注解过的DTO类型创建指定Table的TableViewer * @param table 指定Table * @param tClass 注解过的DTO类型 * @return 创建的TableViewer * @throws Exception Render过程中的异常 */ public static TableViewer renderTable(Table table,Class<?> tClass) throws Exception { getTableFactory().setColumnAnnotationFactory(getColumnFactory()); return getTableFactory().createSTableViewer(table, tClass); } /** * 返回创建TableViewer的工厂 * @return 创建TableViewer的工厂 */ public static STableViewerFactroy getTableFactory() { if(tableFactory == null) tableFactory = new STableViewerFactroy(); return tableFactory; } /** * 返回根据注解创建Cloumn的工厂 * @return 根据注解创建Cloumn的工厂 */ public static ColumnAnnotationFactory getColumnFactory() { if(columnFactory == null) columnFactory = new ColumnAnnotationFactory(); return columnFactory; } /** * 设置根据注解创建Cloumn的工厂 * @param columnFactory 根据注解创建Cloumn的工厂 */ public static void setColumnFactory(ColumnAnnotationFactory columnFactory) { TableRender.columnFactory = columnFactory; } }
package solonote.common.swt.table; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; /** * 表中列排序的策略 * @author longgangbai * */ public class TableSorter extends ViewerSorter { /** * 表中的一列 */ private IColumn column; /** * 是否降序 */ private boolean isDescend; /** * 对指定的列排序 * @param column 指定的列 */ public void doSort(IColumn column) { if(this.column == column) isDescend = !isDescend; else { this.column = column; } } /** * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public int compare(Viewer viewer,Object obj1,Object obj2) { if(column == null) return 0; if(isDescend) return column.compare(obj2, obj1); else return column.compare(obj1, obj2); } /** * 返回是否降序 * @return 是否降序 */ public boolean isDescend() { return isDescend; } }
发表评论
-
Equinox OSGi系列之三 Equinox配置参数详解(转)
2013-03-22 15:20 6953Eclipse不提示的解决办法 我们知道,在Eclips ... -
RCP自定义扩展点的应用
2010-05-06 14:21 3036打开plugin.xml文件中Extensi ... -
Nebula 的几个常用的widgets的使用
2010-05-06 14:15 5644package com.easyway.tbs.commons ... -
RCP GridViewer的学习应用
2010-05-05 21:47 4204package com.easyway.tbs.commons ... -
多项编辑页的学习应用
2010-05-05 20:41 2761package com.easyway.plugin.dev. ... -
gef中自身实现的常用功能的原理和实现
2010-04-23 21:35 2380在gef中关于常用功能对应的action在org.eclip ... -
gef中几何对齐功能原理以及实现
2010-04-23 21:34 2745几何对齐功能也是为了方便用户排列图形元素的,如果打开了此功 ... -
gef中打印功能的原理和实现
2010-04-23 21:33 2816在gef中关于打印的功能,采用PrintGraphicalV ... -
gef中采用公共的快捷键功能的原理和实现
2010-04-23 21:27 2562在gef相关的编辑器类中采用快捷键处理器KeyHandler ... -
gef 上下文菜单的应用
2010-04-23 21:26 2872在gef的编辑器视图中添加相关的上下文菜单,经常需要是实 ... -
网上流传的一个RCP Table Grid打印实现原理和局限性
2010-04-22 20:11 3255package com.easyway.tbs.common ... -
gef中编辑图中添加背景图片原理以及实现
2010-04-22 20:01 2920GEF的RootEditPart对应的Figure是一个 ... -
gef中将流程图转换图片复制粘贴原理以及实现
2010-04-22 19:59 2914设计思路如下:将一个gef图元转换为一个图片(create ... -
gef编辑器中需要采用向导页
2010-04-22 19:57 2635在一般的gef编辑器中需要采用向导页,生成一个格式的 ... -
gef中拖动拽动原理以及实现(一)
2010-04-22 19:49 3229gef中拖动拽动原理以及实现 方案一: 创 ... -
gef中添加可折叠调色板原理以及实现(二)
2010-04-22 19:47 3162gef中添加可折叠调色板原理以及实现 中主要的Palette ... -
gef中添加可折叠调色板原理以及实现(一)
2010-04-22 19:45 3150最近心情不好,写 ... -
一个用RCP实现的简单的GEF程序
2010-04-17 22:02 3493最近在学习GEF,本例 ... -
RCP 线程的开发应用
2010-03-16 15:22 2432http://www.blogjava.net/gembin/ ... -
使用Eclipse自带的PropertySheet
2010-03-03 17:36 2716在项目中遇到一些小问 ...
相关推荐
TableViewer是SWT JFace库中的一个组件,它为 SWT 的 Table 控件提供了一种数据绑定和视图操作的能力。通过TableViewer,我们可以轻松地将数据模型与表视图关联起来,实现数据的动态更新和交互。 首先,我们需要...
在本文中,我们将深入探讨如何使用Swt/Jface库中的`tableViewer`组件来创建一个基本的表格视图。Swt(Standard Widget Toolkit)是Java中用于开发原生界面的应用程序开发工具包,而Jface是建立在Swt之上的抽象层,...
关于压缩包文件`tableReflectPro`,名字暗示可能是一个关于反射(Reflection)的工具或示例,可能用于动态地获取和修改数据模型,以适应不同的数据源。在Java中,反射机制允许程序在运行时检查类、接口、字段和方法...
在IT领域,特别是Java Swing和Eclipse RCP开发中,TableViewer是经常被用来展示数据的一个组件。"Set TableViewer Cell Focus"这个话题是关于如何在TableViewer中设置焦点到特定单元格上,这对于实现用户交互和数据...
在 Eclipse RCP(Rich Client Platform)开发中,`TableViewer` 是一个强大的组件,用于展示数据表。`TableViewer` 是 `JFace` 库的一部分,它提供了与 SWT(Standard Widget Toolkit)表格控件的高级接口,使得数据...
在Java SWT(Standard Widget Toolkit)库中,TableViewer是一个强大的组件,用于在用户界面中展示表格数据。它提供了丰富的功能,如排序、过滤、编辑和自定义列显示,是构建桌面应用时处理数据展示的常用工具。本文...
在Java开发领域,尤其是涉及到Swing或Eclipse RCP( Rich Client Platform)应用程序时,`TableViewer`是一个非常重要的组件。它允许开发者在用户界面中展示表格数据,并提供了丰富的功能来处理这些数据。本篇文章将...
2. "Tab between fields in TableViewer - Stack Overflow.mht" 可能是一个关于如何在TableViewer的不同单元格间使用tab键切换的问题和解答。 3. "jface TableViewer ViewerCell editElement based on Column - ...
首先,`TableViewer`是Swt/Jface提供的一个高级组件,它封装了Swt中的`Table`控件,增加了许多便捷的功能,如数据绑定、过滤、排序等。在“入门教程三”中,我们将关注如何实现在表格中直接编辑数据,这是提高用户...
Jface TableViewer控件实现的对标签文件的标签属性的修改功能。 用TextCellEditor和ComboBoxCellEditor给表格添加编辑功能。 通过表格的addListener事件为表格的单元格添加编辑功能,事例根据鼠标点击时鼠标的X和Y...
点击Enter键,对TableViewer的单元格进行逐个遍历的辅助类,推荐用于使用ViewerColumn.setEditingSupport的可编辑TableViewer。 Since 3.3, an alternative API is available, see ViewerColumn.setEditingSupport...
RCP开发比Table更高级的TableViewer的使用。实现列的隐藏与显示
虽然文件名字起得很笼统 里面只有一个关于TableViewer的项目源码 源码的依据是我转载的一篇学习TableViewer的博客源码 http://blog.csdn.net/weiweiwei256/article/details/49514699
在Java开发领域,TableViewer是SWT(Standard Widget Toolkit)库中的一个重要组件,常用于创建类似于电子表格的数据展示界面。这个“带有翻页功能的TableViewer.rar”文件可能包含了一个示例项目,演示如何在...
Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar
**TableViewer** 是JFace组件中非常重要的一个成员,它不仅提供了丰富的功能,还引入了一系列核心概念,如内容器(Content Provider)、标签器(Label Provider)、过滤器(Filter)、排序器(Sorter)和修改器...
Eclipse RCP(Rich Client Platform)是一个用于构建桌面应用程序的强大框架,它允许开发者利用Java语言创建功能丰富的、可扩展的应用程序。本篇文章将详细介绍如何利用Eclipse RCP开发一个简单的MySQL客户端工具,...
在JFace中,`TableViewer`是基于SWT `List`的一个封装,提供了更高级的功能,如数据绑定、列排序和过滤等。如果你需要一个更复杂的表格视图,可以考虑使用`TableViewer`。 总的来说,SWT和JFace提供了丰富的GUI组件...
RCP 打开视图的不同实例,并设置不同的值 ,创建一个视图,里面布局用了个tableviewer,通过一个Action,按钮打开该视图,每次打开的视图的内容可设置不同。 说明文档为 ...
1. **创建 TableViewer**:与 `TreeViewer` 类似,创建一个 `TableViewer` 实例,并将其添加到窗口中。 ```java TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.MULTI); ``` 2. **实现 ...