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