JAVA(SWT)仿visual studio GUI设计器
背景介绍:
作者从事 JAVA SWT桌面应用开发多年,深感JAVA 开发的 GUI代码的繁锁与重复。于是想改进JAVA图行界面设计器 windowbuilder pro 在上面加入类似visaul studio design 中数据集的功能。注:该设计器目前只应用于SWT非swing
1 功能演示
废话不多说,通过实现“产品管理”的增删改查功能来看看效果。
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 ,或直接发邮件