通过使用本文的设置,引入附件的类,可以达到设置排序,可编辑,显示,换行,适应宽度等功能,
tableViewer可以达到很多功能,但也由于功能的强大,导致需要输入代码的冗余和繁重,有没有一种简单的方法,就可以达到默认的基本功能呢。
答案是有的,通过java的映射机制,我们可以简化很多有规律的代码
在我这篇文章的规范中,model类,会配备一个modelFinal类,final类是为了配置属性的排序,和属性对应的文字的排序。
GoodsBean.java
private int goodsId;
private String goodsName;
private String stardard;
private String category;
对应的final类就应该这样设置
public static GoodsBeanFinal inst = new GoodsBeanFinal();
//表示各字段,对应的columuIndex
public int goodsId = 0;
public int goodsName = 1;
public int stardard = 2;
public int category = 3;
//设置字段的顺序,与下面的COLUMU_NAME对应
public int[] COLUMU_INDEX = new int[] { goodsId, goodsName, stardard, category };
public String[] COLUMU_NAME = { "商品id", "商品名称", "商品规格", "类目" };
public int[] CAN_MODIFY = { goodsId, category };
private GoodsBeanFinal() {
System.err.println("..............");
}
@Override
public int[] getColumuIndex() {
// TODO Auto-generated method stub
return COLUMU_INDEX;
}
@Override
public String[] getColumuName() {
// TODO Auto-generated method stub
return COLUMU_NAME;
}
//复写此接口,表示该数组对应的属性可以编辑
@Override
public int[] getCanModify() {
// TODO Auto-generated method stub
return CAN_MODIFY;
}
自此,设置已经完成,只要导入了文章的包,就可以调用生成tableViewer了。
生成代码:
//生成测试数据
List<GoodsBean> list = new ArrayList<GoodsBean>();
for(int i = 0 ; i < 10 ; i++){
GoodsBean gb = new GoodsBean();
gb.setGoodsId(i);
gb.setGoodsName(r.getRandomECN(0, 5));
gb.setStardard(r.getRandomECN(0, 5));
gb.setCategory("点我可编辑");
list.add(gb);
}
TableViewer tableViewer = new TableViewer(shell,SWT.FULL_SELECTION);
//设置成通用的没有特殊需求的tableViewer
//如果有特殊需求,可以通过复写provider包下的类,达到所需要的要求
TableUtil.setCommon(tableViewer, GoodsBeanFinal.inst);
tableViewer.setInput(list);
tableViewer.refresh();
一下简单说下这些功能的原理:
通过final类
如:我想找寻index为1的属性是谁,通过映射,可以得到对应的属性为goodsName = 1;
通过goodsName获取到model的goodsName属性,达到get,set的功能。
至于更详细的实现操作,请下载源码,查看方法的注释,不在此累述。
如果有问题,请留言。