java swt 开发的一个小型应用程序(从设计到打包成软件.exe文件的总结)

来源:互联网 发布:大数据和大数据开发 编辑:程序博客网 时间:2024/06/05 11:43

java swt 开发的一个小型应用程序(从设计到打包成软件.exe文件的总结)

1,背景:这几天一直在用金山打字通练习英语(本人英语比较烂),把金山打字能里面的文章全部掠了N遍。打的没意思了,想想怎么能添加一些外部文件,发现金山打字通自带的外部文件导入,太坑了,得往里面手工复制内空。看了下面的图就知道效率不高吧。


我就想自己写一个能够批量导入的小软件,虽然小,可是五脏俱全。
这里主要写一下,这次写程序遇到的问题,的解决方案与注意。以备下次使用! 还是先看下,我的成果吧!



一,关于swt的问题

1,去掉swt窗口的外边框: shell = new Shell(SWT.NO_TRIM);

2,在去掉swt的窗口边框以后,swt窗口是不能拖动的,所以要自己添加事件,能够像正常窗口那样,按住鼠标能手动窗口,放开鼠标窗口移动到鼠标放开的位置。

1)写一个内部内,继承Listener

//窗口移动private class ShellMoveListenter implements Listener{public void handleEvent(Event arg0) {       switch (arg0.type) {          case SWT.MouseDown:              p.x = arg0.x;              p.y = arg0.y;              break;          case SWT.MouseMove:              if (p.x == -1) {                  break;              }              Point point = shell.toDisplay(arg0.x, arg0.y);              shell.setLocation(point.x - p.x, point.y - p.y);              break;          case SWT.MouseUp:              p.x = -1;              p.y = -1;              break;            default:              break;          }  }}

2),让shell绑定该件事

Listener listener = new ShellMoveListenter();shell.addListener(SWT.MouseDown, listener);shell.addListener(SWT.MouseMove, listener);shell.addListener(SWT.MouseUp, listener);


3,设置窗口显示在屏幕中间:

//得到屏幕分辨率Rectangle area = Display.getDefault().getClientArea();int windowWidth=area.width;int windowHeight=area.height;//得到窗口宽高int width=shell.getBounds().width;int height=shell.getBounds().height;//设置窗口位置 int x=(windowWidth-width)/2;int y=(windowHeight-height)/2;shell.setLocation(x, y);


4,打开文件夹选项框,并把得到的路径设置到text中

//打开文件选项框public String openFile(String text){DirectoryDialog dd=new DirectoryDialog(shell);dd.setText(text);dd.setFilterPath("SystemDrive");dd.setMessage("这个是什么?");String selecteddir=dd.open();return selecteddir;}

button.addSelectionListener(new SelectionAdapter() {@Overridepublic void widgetSelected(SelectionEvent arg0) {String path=openFile("请选择要导入的文件夹目录!");if(path!=null)fileText.setText(path);}});


 5,外部资源路径问题,比如说背景图片:建议放在项目下面,这样打包时可以不用打包资源文件。我的项目结构如下:

1) 不能用:Stringpath=ClassLoader.getSystemResource("res/").getPath()+"bg.jpg";//这个在打包后,会报空指针异常,具体是怎么回事,我不知道。

建议用:path1 = System.getProperty("user.dir"); //得到是项目的根目录。

2)中文中问题:path1=URLDecoder.decode(path1,"UTF-8");//进行转码处理。不然会   报找不到路径异常

6,设置窗口打开与关闭的渐显与渐隐效果

打开时:渐显

shell.setAlpha(0);shell.open();int i=0;while(shell.getAlpha()<255){shell.setAlpha(i++);try {Thread.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}}

关闭时:渐隐

closeBtn.addSelectionListener(new SelectionAdapter(){//关闭窗口@Overridepublic void widgetSelected(SelectionEvent event) {int i=254;while(!(shell.getAlpha()<=0)){shell.setAlpha(i--);try {Thread.sleep(3);} catch (InterruptedException e2) {e2.printStackTrace();}}shell.close();}});

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq登陆后隐藏了怎么办 易班密码忘记了怎么办 老师上课讲错了怎么办 专升本差了一分怎么办 登录不上学信网怎么办 steam被好友删了怎么办 护士继续教育学分证丢了怎么办 护士证到期未延续注册怎么办 学籍和户口不在一起小升初怎么办 定了酒店不能退怎么办 去哪儿网酒店不允许取消怎么办 快递寄送身份证扣海关怎么办 7岁龋齿烂到牙根怎么办 法院判完对方说没钱怎么办 初中填完志愿后怎么办 上海小学借读一年级没有学籍怎么办 学历不高的我该怎么办 没学历的我该怎么办 物业达不到服务标准该怎么办 没有能力的人该怎么办 工作累了腰疼怎么办 机场来早了6小时怎么办 苏宁金融综合评分不足怎么办 苏宁金融秒拒怎么办 微盘账号忘记了怎么办 天府e税忘记密码怎么办 未成年在外面没地方住怎么办? 半框眼镜片掉了怎么办 选修差0.5个学分怎么办 脱产考博社保卡怎么办 幼儿上课不认真听讲怎么办 手机恢复的音频文件打不开怎么办 高考志愿填报不记得密码怎么办 经济纠纷案被告没有证据怎么办 管家婆管理员密码忘记了怎么办 人离职了公司扣发工资怎么办? 美国给我们断网怎么办 sci发表后发现错误怎么办 pos机按键是英文怎么办 蔚县县医院慢病本怎么办 知网下载的论文乱码怎么办