`
longgangbai
  • 浏览: 7332395 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于一个TableViewer的注解封装(转载)

阅读更多

     在项目你可能为多个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;
	}
}

 

 

 

分享到:
评论

相关推荐

    SWT中自己订制了一个TableViewer(用于我的列出项目中的所有错误信息),作为测试用的。与大家分享

    TableViewer是SWT JFace库中的一个组件,它为 SWT 的 Table 控件提供了一种数据绑定和视图操作的能力。通过TableViewer,我们可以轻松地将数据模型与表视图关联起来,实现数据的动态更新和交互。 首先,我们需要...

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

    在本文中,我们将深入探讨如何使用Swt/Jface库中的`tableViewer`组件来创建一个基本的表格视图。Swt(Standard Widget Toolkit)是Java中用于开发原生界面的应用程序开发工具包,而Jface是建立在Swt之上的抽象层,...

    swt/jface tableViewer开发简化

    关于压缩包文件`tableReflectPro`,名字暗示可能是一个关于反射(Reflection)的工具或示例,可能用于动态地获取和修改数据模型,以适应不同的数据源。在Java中,反射机制允许程序在运行时检查类、接口、字段和方法...

    Set TableViewer Cell Focus

    在IT领域,特别是Java Swing和Eclipse RCP开发中,TableViewer是经常被用来展示数据的一个组件。"Set TableViewer Cell Focus"这个话题是关于如何在TableViewer中设置焦点到特定单元格上,这对于实现用户交互和数据...

    tableviewer edit

    在 Eclipse RCP(Rich Client Platform)开发中,`TableViewer` 是一个强大的组件,用于展示数据表。`TableViewer` 是 `JFace` 库的一部分,它提供了与 SWT(Standard Widget Toolkit)表格控件的高级接口,使得数据...

    TableViewer示例

    在Java SWT(Standard Widget Toolkit)库中,TableViewer是一个强大的组件,用于在用户界面中展示表格数据。它提供了丰富的功能,如排序、过滤、编辑和自定义列显示,是构建桌面应用时处理数据展示的常用工具。本文...

    Tableviewer实现

    在Java开发领域,尤其是涉及到Swing或Eclipse RCP( Rich Client Platform)应用程序时,`TableViewer`是一个非常重要的组件。它允许开发者在用户界面中展示表格数据,并提供了丰富的功能来处理这些数据。本篇文章将...

    Setting focus cell in TableViewer

    2. "Tab between fields in TableViewer - Stack Overflow.mht" 可能是一个关于如何在TableViewer的不同单元格间使用tab键切换的问题和解答。 3. "jface TableViewer ViewerCell editElement based on Column - ...

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

    首先,`TableViewer`是Swt/Jface提供的一个高级组件,它封装了Swt中的`Table`控件,增加了许多便捷的功能,如数据绑定、过滤、排序等。在“入门教程三”中,我们将关注如何实现在表格中直接编辑数据,这是提高用户...

    TableViewer单元格编辑功能

    Jface TableViewer控件实现的对标签文件的标签属性的修改功能。 用TextCellEditor和ComboBoxCellEditor给表格添加编辑功能。 通过表格的addListener事件为表格的单元格添加编辑功能,事例根据鼠标点击时鼠标的X和Y...

    JFace TableViewer的单元格逐个遍历的辅助类

    点击Enter键,对TableViewer的单元格进行逐个遍历的辅助类,推荐用于使用ViewerColumn.setEditingSupport的可编辑TableViewer。 Since 3.3, an alternative API is available, see ViewerColumn.setEditingSupport...

    RCP开发之TableViewer 列的显示与隐藏

    RCP开发比Table更高级的TableViewer的使用。实现列的隐藏与显示

    TableViewer学习源码

    虽然文件名字起得很笼统 里面只有一个关于TableViewer的项目源码 源码的依据是我转载的一篇学习TableViewer的博客源码 http://blog.csdn.net/weiweiwei256/article/details/49514699

    带有翻页功能的TableViewer.rar

    在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 Plugins-JFace-TableViewer.rar

    Eclipse从入门到精通2

    **TableViewer** 是JFace组件中非常重要的一个成员,它不仅提供了丰富的功能,还引入了一系列核心概念,如内容器(Content Provider)、标签器(Label Provider)、过滤器(Filter)、排序器(Sorter)和修改器...

    eclipse RCP开发一个简单的MYSQL客户端工具介绍

    Eclipse RCP(Rich Client Platform)是一个用于构建桌面应用程序的强大框架,它允许开发者利用Java语言创建功能丰富的、可扩展的应用程序。本篇文章将详细介绍如何利用Eclipse RCP开发一个简单的MySQL客户端工具,...

    SWT(JFace)体验之List演示汇总第1/2页

    在JFace中,`TableViewer`是基于SWT `List`的一个封装,提供了更高级的功能,如数据绑定、列排序和过滤等。如果你需要一个更复杂的表格视图,可以考虑使用`TableViewer`。 总的来说,SWT和JFace提供了丰富的GUI组件...

    RCP 打开视图的不同实例,并设置不同的值,工程代码可运行

    RCP 打开视图的不同实例,并设置不同的值 ,创建一个视图,里面布局用了个tableviewer,通过一个Action,按钮打开该视图,每次打开的视图的内容可设置不同。 说明文档为 ...

    Eclipse下SWT图形界面开发指南(1)

    1. **创建 TableViewer**:与 `TreeViewer` 类似,创建一个 `TableViewer` 实例,并将其添加到窗口中。 ```java TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.MULTI); ``` 2. **实现 ...

Global site tag (gtag.js) - Google Analytics