两年没用过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
或者下载附件