利用注解简化tableViewer开发

两年没用过swt做开发了,现在看回来两年前的代码写法,确实有些惨不忍睹的地方,利用空余的时间小修小补了一下,但是项目中大体的写法设计还是有些问题的,不过本次重点只在于简化开发配置,本次用了注解的方式去处理配置,感觉比之前的字符串的方式,要方便许多。

新增注解说明类:

@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到  
@Target({ElementType.FIELD,ElementType.METHOD})//定义注解的作用目标**作用范围字段、枚举的常量/方法  
@Documented//说明该注解将被包含在javadoc中
public @interface YtTableItemAnno {

	/**是否可编辑*/
	boolean editor() default false;
	
	/** table的header列的文本 */
	String itemText() ;
	
	/** table的header列的宽度*/
	int width() default 80 ; 
	
	/** header的排序*/
	int itemIndex() ;
	
	
}

注解说明类,处理了常用的tableviewer的列功能处理,如宽度,可编辑等。 

新增javabean用来对应tableviewer的列元素显示。

public class InOrderDesc {
	private int inOrderId;
	private String no;
	private String supName;
	private float allMoney = 0.00f;

	// 订单id|合同号|供应商|总金额
	
	@YtTableItemAnno(editor = false, itemText = "订单id", itemIndex = 0 , width = 50)
	public int getInOrderId() {
		return inOrderId;
	}

	public void setInOrderId(int inOrderId) {
		this.inOrderId = inOrderId;
	}
	@YtTableItemAnno(editor = false, itemText = "合同号", itemIndex = 1 , width = 50)
	public String getNo() {
		return no;
	}

	public void setNo(String no) {
		this.no = no;
	}
	@YtTableItemAnno(editor = true, itemText = "供应商(可编辑)", itemIndex = 2 ,  width = 100)
	public String getSupName() {
		return supName;
	}

	public void setSupName(String supName) {
		this.supName = supName;
	}

	@YtTableItemAnno(editor = true, itemText = "总金额(可编辑)", itemIndex = 3 ,  width = 100)
	public float getAllMoney() {
		return allMoney;
	}

	public void setAllMoney(float allMoney) {
		this.allMoney = allMoney;
	}

	@Override
	public String toString() {
		return "InOrderDesc [inOrderId=" + inOrderId + ", no=" + no
				+ ", supName=" + supName + ", allMoney=" + allMoney + "]";
	}
	@YtTableItemAnno(editor = true, itemText = "是否超过20块", itemIndex = 4 ,  width = 50)
	public String getFlag() {
		if (allMoney > 20) {
			return "是";
		}
		return "否";
	}

}

 可以看到,现在的配置,直接是写在了javabean中,不需要单独去做处理

而生成一个tableviewer的方式,只需要以下写法

	private void initTable2() {
		List<InOrderDesc> list = new ArrayList<InOrderDesc>();
		//创建随机数据
		for(int i = 0 ; i < 10 ; i++){
			InOrderDesc gb = new InOrderDesc();
			gb.setInOrderId(i);
			gb.setNo(r.getEnRandom(5, 10));
			gb.setSupName(r.getChRandom(1, 3));
			gb.setAllMoney(Float.valueOf(r.getNumFixed(4))/100);
			list.add(gb);
		}
		//初始化tableViewer
		YtCheckBoxTable tableViewer = YtCheckBoxTable.newSimpleTable(this, InOrderDesc.class);
		//设置数据显示列表
		tableViewer.setEoList(list);
		
		
	}

 效果图如下:



 

总体的作法,就是在你创建一个bean的时候把你所需要的处理用注解的方式写入进去,就可以生成一个tableviewer了。git代码而下

https://github.com/JavaRui/pers.crwu.swt.tableviewer.git

或者下载附件

猜你喜欢

转载自1299020954.iteye.com/blog/2421805
今日推荐