开源的JAVA(SWT)仿visual studio GUI设计器


JAVASWT)仿visual studio GUI设计器

背景介绍:

作者从事 JAVA SWT桌面应用开发多年,深感JAVA 开发的 GUI代码的繁锁与重复。于是想改进JAVA图行界面设计器 windowbuilder pro 在上面加入类似visaul studio design 中数据集的功能。注:该设计器目前只应用于SWTswing

1        功能演示

废话不多说,通过实现“产品管理”的增删改查功能来看看效果。

1          首先用设计器画好“产品查询”主界面


170746_dLVM_1991010.png

2         添加“产品类别”数据集

170748_a1Sj_1991010.png

拖动数据集控件即可打开数据集管理界面

170750_sfa8_1991010.png

对应生成的代码

/**
	 * @wbp.nonvisual location=117,442
	 */
	private final Dataset cplb = new Dataset("select * from cplb",
			SqliteJdbcImpl.INSTANCE);

选择数据源解析执行器,输入Sql语句,即完成了一个数据据集的制作,点击预览数据可实时预览数据。相比微软N多的向导与配置是不是简单多了呀171236_n7mV_1991010.gif

170753_VgEC_1991010.png

3          一步绑定数据集至下拉框控件

170758_q0kk_1991010.png

设置下拉框显示的文本

170759_nFT0_1991010.png

4          添加“产品列表信息”数据集

数据集 分为自定义和系统定义两种类型,自定义是直接在写死在JAVA类里面,只用作用于本类。系统定义是通过数据解析执行器保存在外部(数据库或文件),软件发布之后还可以修改,并且作用于整个系统。

173002_IRTk_1991010.png

选择系统数据集后,加载相关信息至数据源

170803_AN29_1991010.png

对应生成的代码

private final Dataset cpxxSet = new Dataset(true, "cpxx",
			SqliteJdbcImpl.INSTANCE);

点击SQL 中的?可定位到左边的参数项,点击参数项中三角按钮打开参数设置界面

170809_eAdG_1991010.png

对应生成的代码

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());
	}

点击预览按钮先预览一下数据先171529_W9SB_1991010.gif

170811_QvTz_1991010.png

5          将产品信息数据集绑定至表格

绑定的方法与下拉框绑定一样,接下来要做的就是数据集属性与对应的表格列绑定,从左边属性列中添加至右边,设置好别名即完成绑定

170813_SEak_1991010.png

对应自动生成的代码

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);

至此一个产品信息的查询功能就已完成了.来看一下设计器自动生成的代码,生成的是全部都是最基本的代码,没有强行绑定必须用第三方代码。

170815_uTtk_1991010.png


6       用设计器画好产品添加界面

170815_TVxp_1991010.png

7.        添加产品类别、单位数据集并绑定至对应控件

具体方法之前已经介绍

8.        添加产品信息数据集并填充至对应控件

替换了设计器中原有的字符串编辑器,添加了数据集绑定功能点击如图‘选择’按钮即可

170816_vAK1_1991010.png

拼接数据集属性,即完成了将数据集中的数据填充至各个控件。

170817_E74w_1991010.png

同样Boolean类型也在原基础之上添加了数据集编辑器,选择数据集属性之后会自动转换成Boolean

170818_Oq15_1991010.png

对应生成的代码,(对自动生成代码的部分修改,不会影响设计器 重新解析编辑)

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更新语句,相关的参数可与界面中的控件属性进行绑定

170818_hWEk_1991010.png

/**
	 * @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 ,或直接发邮件






转载于:https://my.oschina.net/TommyZgw/blog/296894

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值