背景介绍:
作者从事 JAVA SWT桌面应用开发多年,深感JAVA 开发的 GUI代码的繁锁与重复。于是想改进JAVA图行界面设计器 windowbuilder pro 在上面加入类似visaul studio design 中数据集的功能。注:该设计器目前只应用于SWT非swing
1 首先用设计器画好“产品查询”主界面
2 添加“产品类别”数据集
拖动数据集控件即可打开数据集管理界面
对应生成的代码
/** * @wbp.nonvisual location=117,442 */ private final Dataset cplb = new Dataset("select * from cplb", SqliteJdbcImpl.INSTANCE);
选择数据源解析执行器,输入Sql语句,即完成了一个数据据集的制作,点击预览数据可实时预览数据。相比微软N多的向导与配置是不是简单多了呀
3 一步绑定数据集至下拉框控件
设置下拉框显示的文本
4 添加“产品列表信息”数据集
数据集 分为自定义和系统定义两种类型,自定义是直接在写死在JAVA类里面,只用作用于本类。系统定义是通过数据解析执行器保存在外部(数据库或文件),软件发布之后还可以修改,并且作用于整个系统。
选择系统数据集后,加载相关信息至数据源
对应生成的代码
private final Dataset cpxxSet = new Dataset(true, "cpxx", SqliteJdbcImpl.INSTANCE);
点击SQL 中的‘?’可定位到左边的参数项,点击参数项中三角按钮打开参数设置界面
对应生成的代码
protected void setParams() { cpxxSet.setParam(0, dataCombo.getText()); cpxxSet.setParam(1, dataCombo.getText()); cpxxSet.setParam(2, text.getText()); cpxxSet.setParam(3, text.getText()); cpxxSet.setParam(4, text.getText()); cpxxSet.setParam(5, text.getText()); cpxxSet.setParam(6, btnCheckButton.getSelection()); }
点击预览按钮先预览一下数据先
5 将产品信息数据集绑定至表格
绑定的方法与下拉框绑定一样,接下来要做的就是数据集属性与对应的表格列绑定,从左边属性列中添加至右边,设置好别名即完成绑定
对应自动生成的代码
DataTable dataTable = new DataTable(composite, SWT.BORDER | SWT.FULL_SELECTION, cpxxSet); dataTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); dataTable.setHeaderVisible(true); dataTable.setLinesVisible(true); DataTableColumn dataTableColumn = new DataTableColumn(dataTable, SWT.NONE, "cpbh"); dataTableColumn.setText("产品编号"); dataTableColumn.setWidth(80); DataTableColumn dataTableColumn_1 = new DataTableColumn(dataTable, SWT.NONE, "cpmc"); dataTableColumn_1.setText("产品名称"); dataTableColumn_1.setWidth(80); DataTableColumn dataTableColumn_2 = new DataTableColumn(dataTable, SWT.NONE, "lb"); dataTableColumn_2.setText("类别"); dataTableColumn_2.setWidth(80); DataTableColumn dataTableColumn_5 = new DataTableColumn(dataTable, SWT.NONE, "tm"); dataTableColumn_5.setText("条码"); dataTableColumn_5.setWidth(80); DataTableColumn dataTableColumn_3 = new DataTableColumn(dataTable, SWT.NONE, "dw"); dataTableColumn_3.setText("单位"); dataTableColumn_3.setWidth(80); DataTableColumn dataTableColumn_4 = new DataTableColumn(dataTable, SWT.NONE, "gg"); dataTableColumn_4.setText("规格"); dataTableColumn_4.setWidth(80); DataTableColumn dataTableColumn_6 = new DataTableColumn(dataTable, SWT.NONE, "jj"); dataTableColumn_6.setText("进价"); dataTableColumn_6.setWidth(80); DataTableColumn dataTableColumn_7 = new DataTableColumn(dataTable, SWT.NONE, "sj"); dataTableColumn_7.setText("售价"); dataTableColumn_7.setWidth(80); DataTableColumn dataTableColumn_8 = new DataTableColumn(dataTable, SWT.NONE, "cbj"); dataTableColumn_8.setText("成本价"); dataTableColumn_8.setWidth(80); DataTableColumn dataTableColumn_9 = new DataTableColumn(dataTable, SWT.NONE, "kcsl"); dataTableColumn_9.setText("库存数量"); dataTableColumn_9.setWidth(80); DataTableColumn dataTableColumn_10 = new DataTableColumn(dataTable, SWT.NONE, "jy"); dataTableColumn_10.setText("禁用"); dataTableColumn_10.setWidth(80); DataTableColumn dataTableColumn_13 = new DataTableColumn(dataTable, SWT.NONE, "kczj"); dataTableColumn_13.setText("库存总价"); dataTableColumn_13.setWidth(80); DataTableColumn dataTableColumn_11 = new DataTableColumn(dataTable, SWT.NONE, "tzzh"); dataTableColumn_11.setText("套装组合"); dataTableColumn_11.setWidth(80); DataTableColumn dataTableColumn_12 = new DataTableColumn(dataTable, SWT.NONE, "bz"); dataTableColumn_12.setText("备注"); dataTableColumn_12.setWidth(80);
至此一个产品信息的查询功能就已完成了.来看一下设计器自动生成的代码,生成的是全部都是最基本的代码,没有强行绑定必须用第三方代码。
6 用设计器画好产品添加界面
7. 添加产品类别、单位数据集并绑定至对应控件
具体方法之前已经介绍
8. 添加产品信息数据集并填充至对应控件
替换了设计器中原有的字符串编辑器,添加了数据集绑定功能点击如图‘选择’按钮即可
拼接数据集属性,即完成了将数据集中的数据填充至各个控件。
同样Boolean类型也在原基础之上添加了数据集编辑器,选择数据集属性之后会自动转换成Boolean
对应生成的代码,(对自动生成代码的部分修改,不会影响设计器 重新解析编辑)
protected void setValues() { textCpbh.setText(cpxxSet.getValue("cpbh", String.class, "")); textCpmc.setText(cpxxSet.getValue("cpmc", String.class, "")); textTm.setText(cpxxSet.getValue("tm", String.class, "")); ComboLb.setText(cpxxSet.getValue("lb", String.class, "")); comboDw.setText(cpxxSet.getValue("dw", String.class, "")); textGg.setText(cpxxSet.getValue("gg", String.class, "")); textJj.setText(cpxxSet.getValue("jj", String.class, "")); textSj.setText(cpxxSet.getValue("sj", String.class, "")); textBz.setText(cpxxSet.getValue("bz", String.class, "")); if (type == Add) { // 设置产品编号 newId.update(); if (newId.getCount() > 0) { Integer id = newId.getValueForIndex(0, "newId", Integer.class); DecimalFormat df = new DecimalFormat("00000"); textCpbh.setText(df.format(id)); textCpbh.selectAll(); } } btnTtzh.setSelection(cpxxSet.getValue("tzzh", Boolean.class, false)); }
至此产品详情展示功能也完成了。接下来看如何实现增、删除、改的功能。
9. 添加批处理控件
一个批处理控件可对应多个批处理项,每个处理项对应一个SQL更新语句,相关的参数可与界面中的控件属性进行绑定
/** * @wbp.nonvisual location=23,422 */ private final Batch cpxxEdit = new Batch(SqliteJdbcImpl.INSTANCE);
生成添加批处理项代码
{ BatchItem batchItem = new BatchItem(cpxxEdit); batchItem .setCommand("UPDATE cpxx\r\nSET cpmc=?, jm=? ,tm=? ,lb=?, dw=?, \r\ngg=?, jj=?, sj=?, bz=?,tzzh=?\r\nWHERE cpbh=?"); batchItem.setName("修改产品基本信息"); } { BatchItem batchItem = new BatchItem(cpxxEdit); batchItem.setCommand("delete from tzcp where tzbh=?"); batchItem.setName("删除产品对应的套装记录"); }
生成参数设置代码
protected void setParams() { tzcp.setParam(0, cpxxSet.getValue("cpbh")); cpxxEdit.setParam(0, 0, textCpmc.getText()); cpxxEdit.setParam(0, 1, textCpmc.getText()); cpxxEdit.setParam(0, 2, textTm.getText()); cpxxEdit.setParam(0, 3, ComboLb.getText()); cpxxEdit.setParam(0, 4, comboDw.getText()); cpxxEdit.setParam(0, 5, textGg.getText()); cpxxEdit.setParam(0, 6, textJj.getText()); cpxxEdit.setParam(0, 7, textSj.getText()); cpxxEdit.setParam(0, 8, textBz.getText()); cpxxEdit.setParam(0, 9, btnTtzh.getSelection()); cpxxEdit.setParam(0, 10, textCpbh.getText()); cpxxEdit.setParam(1, 0, textCpbh.getText()); cpxxAdd.setParam(0, 0, textCpbh.getText()); cpxxAdd.setParam(0, 1, textCpmc.getText()); cpxxAdd.setParam(0, 2, textCpmc.getText()); cpxxAdd.setParam(0, 3, textTm.getText()); cpxxAdd.setParam(0, 4, ComboLb.getText()); cpxxAdd.setParam(0, 5, comboDw.getText()); cpxxAdd.setParam(0, 6, textGg.getText()); cpxxAdd.setParam(0, 7, textJj.getText()); cpxxAdd.setParam(0, 8, textSj.getText()); cpxxAdd.setParam(0, 9, textBz.getText()); cpxxAdd.setParam(0, 10, btnTtzh.getSelection()); }
OK至此整个演示结束
Dataset数据集 :加载和存储二维数据包括其对应的列,使用设计器可让控件获取其数据,也可编码获取。
Batch 批处理:执行1或多个SQl的增删改操作。
数据集控件:支持绑定Dataset的控件 有 DataCombo(下拉框)、DataTable(表格),控件的一般属性可直接获取数据集数据。
IdataBaseProvide:数据解析提供器,设计器也是能过它来预览数据和管理系统数据集。注:该接口的实现类在修改之后必须重启Eclipse才会在设计器当中生效。
相关下载
---------设计器插件下载
http://pan.baidu.com/s/1hqh4ONa
------------------相关源码-------------------
windowbuilder pro: http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/
eclipse 版本下载 http://archive.eclipse.org/eclipse/downloads/
fireline设计器svn: http://www.svnchina.com/svn/fireline2
com.zgw.fireline.base 数据集控件
com.zgw.fireline.demo 演示Demo
com.zgw.fireline.design 设计器插件
做CS开发的朋友欢迎加qq讨论 276386551 ,或直接发邮件