第一期项目案列解析

1,首先创建登录页面;

中间的一些小技巧;

shell.setLocation(centerPoint); //使窗口定位在中间

给退出按钮绑定监听事件:会弹出一个信息框,是否确定退出:

button.addSelectionListener(new SelectionAdapter() {

//退出按钮

public void widgetSelected(SelectionEvent e) {

//1,系统退出

MessageBox mb=new MessageBox(shell, SWT.YES|SWT.NO);//弹出一个信息框,判断是否退出

mb.setText(“确定退出吗?”); //这里的yes No 代表两个按钮

mb.setMessage(“退出”);

int result=mb.open();

if(result==SWT.YES){

System.exit(0);

}

}

});

给登录按钮邦定监听事件,使其点击能够验证用户名,及密码,还有页面的跳转:

需要注意的事这里密码提交到数据库时,使用了加密代码,由工具算法Encrypt提供

其中YcUtil为一个日志文件,用来记录登录 成功与错误 等。

SWTUtil是一个封装的帮助方法里面有:

弹出一个信息框显示 提示信息 showMessageBox

让窗口最大化 maxScreen shell.setLocation(0, 0);//设置窗口的定位

让窗口居中显示 centerScreen 让窗口居中显示 算法: ( 屏幕宽-窗口宽)/2 返回一个点

1,给SQL语句用params添加参数 ,并拿参数与数据库中的实际进行比较验证

2,Params 一个用来存用户信息的类

3,关闭当前的页面,并且创建一个新页面,直接显示主页面

button_1.addSelectionListener(new SelectionAdapter() {

//登录按钮

public void widgetSelected(SelectionEvent e) {

//先取出用户名text 密码text_1

String rname=text.getText().trim().toString(); //获取第一个文本框的输入信息

String rpwd=text_1.getText().trim().toString();

//判断两个文本框是否为空

if( rname==null||”“.equals(rname)){

SWTUtil.showMessageBox(shell, “出错了!”,”用户名不能为空”);

return;

}

if( rpwd==null||”“.equals(rname)){

SWTUtil.showMessageBox(shell, “出错了!”,”密码不能为空”);

return;

}

//使用dbhelp查询数据库

//2.1 sql语句: select * from rename=? and rpwd=?;

String sql=”select * from resadmin where rname=? and rpwd=?”;

Listparams=new ArrayList();
params.add(rname);

params.add(Encrypt.md5(rpwd));//生成32位加密密码

DBHelp db=new DBHelp();

try {

List> list=db.findAll(sql, params);

if(list==null||list.size()<=0){

SWTUtil.showMessageBox(shell, “登录失败”, “用户或密码错误,请重新输入。。。。。。”);

YcUtil.logger.error(rname+”登录失败”);

}else{

SWTUtil.showMessageBox(shell, “登录成功”, “欢迎您”+rname);

YcUtil.logger.info(rname+”登录成功”);

//保存登录的用户信息到静态变量中

Map user=list.get(0);//取到数组的第一个

Params.rid=user.get(“RID”);

Params.rname=user.get(“RNAME”);

Params.rpwd=rpwd;

//Todo: 切换到后台的主页面。。。。

Login.this.shell.setVisible(false); //隐藏此页面

Login.this.shell.dispose(); //关闭此页面

BackMain bm=new BackMain(); //创建一个新的页面,并且固定住主页面

bm.open();

}

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

SWTUtil.showMessageBox(shell, “登录失败”,”数据库访问出错了,信息如下:”+e1.getMessage());

}

}

});

2,跳转到主页面:

第一大面板:放置树节点

通过对树节点的选择事件来跳转面板:

//树的节点

tree.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

//1取出当点的是树的按个节点

TreeItem[] tis=tree.getSelection();

if( this==null||tis.length<=0){

SWTUtil.showMessageBox(shell, “出错了”, “请至少选择一个节点”);

return;

}

TreeItem ti=tis[0]; //只有第一个节点有意义

//取出这个节点 text

String txt=ti.getText();

//3.判断是那个节点

if(txt.equals(“修改密码”)){

sl.topControl=pcc; //运行到这里会跳转到pcc页面

}else if(txt.equals(“类别管理”)){

sl.topControl=tmc;

}else if(txt.equals(“商品管理”)){

sl.topControl=pmc;

}

composite_2.layout(); //重新刷新composite_2布局 才可以动态显示

}

});

第二大面板:private StackLayout sl; //堆栈式布局

//创建堆栈式布局的对象

sl=new StackLayout();

里面再套面板(主面板,密码修改面板,商品管理面板。。。。。)

创建以上面板: private ProManCon pmc; //商品管理面板

//创建四块面板: 第一个参数表示这块面板要放在那个容器中,这里是放在第二大块面板里

pmc=new ProManCon (composite_2 ,SWT.None);

sl.topControl:控制面板的显示

sl.topControl=mc; //先显示主版面

第三大面板:介绍了一点点的线程操作:

因为是多块同时运行所以要运用到线程

用填充的放式里面放了一个label:

再利用线程将时间设置进来,

new Thread( new Runnable(){

@Override

public void run() {

while(flage){

//显示当前时间

SimpleDateFormat sdf=new SimpleDateFormat(“yyyy年MM月dd日HH:mm:ss”);

Date d=new Date();

dstring=sdf.format(d);

//在新线程不能直接操作主线程中的组件 可以绕一下

//label就属于主线程的组件

Display为一个对象 负责和操作系统之间的通信

Display.getDefault().asyncExec(new Runnable(){

public void run() {

//因为多线程是异步操作的,所以在操作label前要判断label的状态

if(label!=null&&label.isDisposed()==false){//判断主组件是否为空且没有被释放

label.setText(dstring);//就是对组件经行操作

}

}

});

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

).start();

第二大面板:中的小版面

修改密码版面:

这里主要就是给修改按钮添加监听事件

首先要根据对应的文本框取出对应的用户信息

再拿这些信息与静态变量中的进行比较是否一致,以此来确定是否修改

修改后将静态变量中的值进行更新,以及将文本框情空

button.addSelectionListener(new SelectionAdapter() {

@Override//给按钮添加监听事件

public void widgetSelected(SelectionEvent e) {

//取出用户名,原密码,新密码

String rname=text.getText().trim().toString();

String oldpwd=text_1.getText().trim().toString();

String newpwd=text_2.getText().trim().toString();

//不能为空

if(rname==null||”“.equals(rname)){

SWTUtil.showMessageBox(parent.getShell(),”出错了”,”用户名不能为空”);

return;

}

if(oldpwd==null||”“.equals(oldpwd)){

SWTUtil.showMessageBox(parent.getShell(),”出错了”,”原密码不能为空”);

return;

}

if(newpwd==null||”“.equals(newpwd)){

SWTUtil.showMessageBox(parent.getShell(),”出错了”,”新密码不能为空”);

return;

}

//1,判断用户与原密码是否与静态变量中保持一致

if(!rname.equals(Params.rname) ||!oldpwd.equals(Params.rpwd)){

SWTUtil.showMessageBox(parent.getShell(),”出错了”,”输入的原用户名与密码不相同”);

return;

}

// 再修改新密码

DBHelp db=new DBHelp();

String sql=”update resadmin set rname=?,rpwd=? where rid=?”;

Listparams=new ArrayList();
params.add(rname);

params.add(Encrypt.md5(newpwd));

params.add(Params.rid);

try {

int result=db.doUpdate(sql, params);

if(result>0){

SWTUtil.showMessageBox(parent.getShell(),”成功”,”修改密码成功”);

Params.rname=rname; //修改立即将其更新,否则在没重新登录的情况下不能再操作

Params.rpwd=newpwd;

text.setText(“”); //将其清空

text_1.setText(“”);

text_2.setText(“”);

}

else{

SWTUtil.showMessageBox(parent.getShell(),”出错了”,”修改密码失败”);

}

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

SWTUtil.showMessageBox(parent.getShell(),”出错了”,”修改密码失败,原因:”+e1.getMessage());

}

}

});

类别管理面板: 又分为三大面板

面板1:

(1)主要是给查询按钮添加监听事件:

先取出对应文本框的信息

特别要注意sql语句的书写;

首先是什么都不输入即是对所有的查询

然后是添加类别名作为条件查询

加入描述时还要判断类别名是否为空,条件是不同的

然后是在列表里面输出: 里面有些小技巧,比如将上一次查询 的清空 ,如何设置列表显示

button.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

String tname=text.getText().trim().toString();

String tdesc=text_1.getText().trim().toString();

//

//

//

//

//where rtname=’湘菜’or rtdesc like’%好%’

//group by rtype.rtid,rtname,rtdesc

String sql=”select rtype.rtid ,rtype.rtname,rtype.rtdesc,count(cid) as countnumber from rtype left join commodity on rtype.rtid=commodity.rtid where 1=1”;

Listparams=new ArrayList();
if(tname!=null&&!”“.equals(tname)){

sql+=” and rtname=?”;

params.add(tname);

}

if(tdesc!=null&&!”“.equals(tdesc)){

if(tname!=null&&!”“.equals(tname)){

sql+=” or “;

}else{

sql+=” and “;

}

sql+=” rtdesc like ?”;

params.add(“%”+tdesc+”%”);

}

sql+=” group by rtype.rtid,rtname,rtdesc”;

DBHelp db=new DBHelp();

try {

List> list= db.findAll(sql, params);

if(list!=null&&list.size()>0){

table.removeAll();//清空以前显示的

for(Map map : list){

//在列表里面输出

TableItem tableItem = new TableItem(table, SWT.NONE);

tableItem.setText(new String[]{ map.get(“RTID”),map.get(“RTNAME”),map.get(“RTDESC”),map.get(“COUNTNUMBER”)});

}

}

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

SWTUtil.showMessageBox(parent.getShell(), “查询错误”, “查询失败”);

}

}

});

面板3:

(1),给添加按钮添加监听事件

因为有几项是自动生成的,所以只要取对应两个框的信息

这里还将查询按钮进行了事件的绑定,即点击添加的同时触发查询按钮

private Event event;

event=new Event();

event.widget=button;//将事件与按钮绑定在一起

button_1.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

String tname=text_3.getText().trim().toString();

String tdesc=text_4.getText().trim().toString();

if(tname==null||”“.equals(tname)){

SWTUtil.showMessageBox(parent.getShell(), “出错了”,”类别名不能为空”);

return;

}

if(tdesc==null||”“.equals(tdesc)){

SWTUtil.showMessageBox(parent.getShell(), “出错了”,”类别名不能为空”);

return;

}

String sql=”insert into rtype (rtid,rtname,rtdesc) values(?,?,?)”;

String tid=UUID.randomUUID().toString();

Listparams=new ArrayList();
params.add(tid);

params.add(tname);

params.add(tdesc);

DBHelp db=new DBHelp();

try {

int result=db.doUpdate(sql, params);

if(result>0){

SWTUtil.showMessageBox(parent.getShell(), “添加类别成功”,”添加编号为:”+tid+”的类别信息成功”);

text_3.setText(“”);

text_4.setText(“”);

//添加绑定事件

button.notifyListeners(SWT.Selection, event);

}else{

SWTUtil.showMessageBox(parent.getShell(), “添加类别失败”,”的类别信息失败”);

}

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

SWTUtil.showMessageBox(parent.getShell(), “添加类别失败”,”原因”+e1.getLocalizedMessage());

}

}

});

(2)更新按钮:

首先应该给表格添加点击事件: //取出当前选定的行 =》取出数据

然后再进行更新操作,同样给更新操作加入查询按钮的绑定 更新也只能改 类别名 和 描述

//给表格加入点击事件

table.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

//取出当前选定的行 =》取出数据

TableItem[] tis=table.getSelection();

if(tis==null||tis.length<=0){

return;

}

TableItem ti=tis[0];

//将这4个数据加到文本框中

text_2.setText(ti.getText(0)); //编号

text_3.setText(ti.getText(1)); //类别

text_4.setText(ti.getText(2)); //描述

text_5.setText(ti.getText(3)); //所属商品数量

}

});

//更新按钮

button_2.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

String tid=text_2.getText().trim().toString();

String tname=text_3.getText().trim().toString();

String tdesc=text_4.getText().trim().toString();

if(tid==null||”“.equals(tid)){

SWTUtil.showMessageBox(parent.getShell(), “出错了”, “类别编号不能为空”);

}

if(tid.equals(“0”)){

SWTUtil.showMessageBox(parent.getShell(), “出错了”, “类别编号为0的不能改这是基础数据”);

return;

}

if(tname==null||”“.equals(tname)){

SWTUtil.showMessageBox(parent.getShell(), “出错了”, “类别名不能为空”);

}

//真正的更新

String sql=”update rtype set rtname=?, rtdesc=? where rtid=?”;

Listparams=new ArrayList();
params.add(tname);

params.add(tdesc);

params.add(tid);

DBHelp db=new DBHelp();

try {

int result=db.doUpdate(sql, params);

if(result>0){

SWTUtil.showMessageBox(parent.getShell(), “恭喜您”,”更新”+tid+”成功”);

text_2.setText(“”);

text_3.setText(“”);

text_4.setText(“”);

text_5.setText(“”);

//添加绑定事件

button.notifyListeners(SWT.Selection, event);

}else{

SWTUtil.showMessageBox(parent.getShell(), “更新失败”,”更新”+tid+”失败”);

}

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

YcUtil.logger.error(“更新”+tid+”失败原因:”+e1.getMessage());

SWTUtil.showMessageBox(parent.getShell(), “更新失败”,”更新”+tid+”失败”);

}

}

});

面板2:

给表格添加右键弹出删除类别功能:

先给表格添加一个菜单 然后在 菜单 上继续添加 子菜单

然后给子菜单添加监听事件

先取在表中选定的行

让用户判断是否真的删除

编号为0 的类别不能删除

删除时如果类别中有商品,先将商品移到 0号 类别下 然后再对类别经行删除

其中还用了隐事事务的关闭,以保证数据的安全

//删除类别

menuItem.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

//1取出表格中选定的行

TableItem [] tis= table.getSelection();

//2,判断是否选了至少一行

//2如果没有选则报错

if(tis==null|| tis.length<=0){

SWTUtil.showMessageBox(parent.getShell(), “出错了”, “请至少选定一行”);

return ;

}

//询问用户是否真的删除

MessageBox mb=new MessageBox(parent.getShell(), SWT.YES| SWT.NO);

mb.setText(“确定删除”);

mb.setMessage(“删除后不可恢复”);

int result =mb.open();

if(result==SWT.NO){

return;

}

//先修改商品表中所有的这个类别的商品改为0类别

String rtid=tis[0].getText(0); //取出要删除的类别的编号(选定的第一行第一列)

//编号为0 的不能删除

if(rtid!=null&& rtid.equals(“0”)){

SWTUtil.showMessageBox(parent.getShell(), “删除失败”, “编号为0的是基础数据,不能删除,请与管理员联系”);

return;

}

String sql=” update commodity set rtid=’0’ where rtid= ?”;

Listparams =new ArrayList();
params.add(rtid);

//再删除当前类别

String sql2=”delete from rtype where rtid=?”;

Listparams2 =new ArrayList();
params2.add(rtid);

List sqls=new ArrayList();

sqls.add(sql);

sqls.add(sql2);

List> paramsList=new ArrayList>();

paramsList.add(params);

paramsList.add(params2);

DBHelp db=new DBHelp();

try {

db.doUpdate(sqls, paramsList);

SWTUtil.showMessageBox(parent.getShell(), “操作成功”,”删除类别成功”);

button.notifyListeners(SWT.Selection, event);

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

SWTUtil.showMessageBox(parent.getShell(), “出错了”,e1.getMessage());

}

}

});

商品管理面板:

这里有个给表格添加删除菜单,将鼠标放到表格上点击右键,就能弹出删除菜单,

menuItem.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

//先取出要删除的行

TableItem[] tis=table.getSelection();

if(tis==null&&tis.length<=0){

return;

}

//从行中取出编号

TableItem ti=tis[0];

String cid=ti.getText(4);

MessageBox mb=new MessageBox(parent.getShell(),SWT.OK|SWT.CANCEL);

mb.setText(“确定要删除吗?”);

mb.setMessage(“删除后数据不可恢复。。。”);

int r=mb.open();

if(r==SWT.CANCEL){

return;

}

//SQL语句

String sql=”delete from commodity where cid=? “;

Listparams=new ArrayList();
params.add(cid);

//调用dbhelp

DBHelp db=new DBHelp();

try {

int result=db.doUpdate(sql, params);

if(result>0){

SWTUtil.showMessageBox(parent.getShell(), “删除成功”, “删除成功”);

}else{

SWTUtil.showMessageBox(parent.getShell(), “删除失败”, “删除失败”);

}

//再查询一次

button_3.notifyListeners(SWT.Selection, event);

//隔山打牛点击查询

Params.button.notifyListeners(SWT.Selection, event);

} catch (Exception e1) {

e1.printStackTrace();

YcUtil.logger.error(e1);

SWTUtil.showMessageBox(parent.getShell(), “删除失败”, e1.getMessage());

}

}

});

还有一个重点是 浏览按钮 用来添加图片

首先要取出用户的路径,再将路径设置到文本框

然后用流的技术来读取图片,这里注意两次加载了图片,因为要考虑到适应文本框

//浏览按钮

button.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

//1显示文件选择对话框

FileDialog dialog = new FileDialog(parent.getShell(),SWT.OPEN);

String userhome=System.getProperty(“user.home”);

dialog.setFilterPath(userhome);//设置初始路径

String fileName=dialog.open();

if(fileName==null|| “”.equals(fileName)){

return;

}

//取出用户的路径

//将路径设置到文本框

text_5.setText(fileName);

//将图片显示在label中

//根据flieName取出输入流

try {

FileInputStream fis=new FileInputStream( new File(fileName));

ImageData imageData=new ImageData(fis);

//重新定义一张图片用来接收修改后的图片,因为有些图片大小不一,所以将图片适应文本框

ImageData newimagedata=imageData.scaledTo(label_10.getBounds().width,label_10.getBounds().height);

Image image=new Image (parent.getDisplay(),newimagedata);

label_10.setImage(image);

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

SWTUtil.showMessageBox(parent.getShell(), “显示图片出错了”, “请与管理员联系”);

}

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值