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

1 篇文章 0 订阅

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() {
			@Override
			public 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(){		//关闭窗口
			@Override
			public 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();
		}
		});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值