您的位置:首页 > 其它

swt/jface tableViewer开发简化

2015-07-31 15:31 337 查看

通过使用本文的设置,引入附件的类,可以达到设置排序,可编辑,显示,换行,适应宽度等功能,

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的功能。
至于更详细的实现操作,请下载源码,查看方法的注释,不在此累述。




如果有问题,请留言。

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

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: