SWT小技巧

SWT的一些小技巧

(一) 多线程访问SWT的控件

SWT中窗口开始show up之后display控件就要开始循环监视events loop了,很多应用程序需要开socket或者使用http协议跟外界通信,收到回复之后再在界面上产生回调行为。而通信逻辑通常封装在另一个线程里,如果直接调用SWT控件会抛出Invalid Thread Access异常,好在SWT提供了多线程访问控件,排队处理events的方式。

 

两个方法:Display类里的syncExec()和asyncExec(),推荐尽量使用后者因为是异步去处理events界面不会产生阻塞不响应的情况。使用方式是在回调方法中调用:

 

 

(二) 关于SWT的Text滚动和样式问题

SWT的Text当设置成MULTI之后可以多行显示,但是不主动回车的话一排输入满了,会无限延伸下去,另外多行输入不会自动下滚,界面一直停留在最上面一行。这里推荐使用另外一个Text控件StyledText。 

 

StyledText自动下滚只要初始化控件之后加一行text.setTopIndex(Integer.MAX_VALUE); 

StyledText有一个自动换行的方法叫setWordWrap(true) 

StyledText还可以设置添加进来内容的样式,包括加粗、变色、下划线之类的,方法是每次添加内容的时候,先构建一个该内容的绘制规则StyleRange,每个StyleRange必须有一个start index和一个length,然后根据需要设置样式必须它有fontStyle属性、foreground属性等。构建完StyleRange之后调用styledText.setStyleRange(range)就可以了

 

(三) 新控件:CLabel、Browser、Link

CLabel控件提供了很方便的对齐功能等,API解释是:A Label which supports aligned text and/or an image and different border styles. 所以在界面对齐、边框平滑上推荐使用CLabel。

 

Browser提供了内置的浏览器控件,可以把URL加载进去显示出来,实际上就是一个对Html语言的解析显示控件。显示时调用browser.setUrl()提供url字符串就可以了

 

Link是针对Label控件无法点击而提供的一个补充控件,说白了就是类似Button的Label。因为Label控件是无法addSelectionHandler的,所以很多时候想产生点击响应的时候被迫使用mouseDown事件来实现。现在使用Link之后就兼容进了selection事件。不要误解为这是一个“超链接”控件,可以直接连入网页的。如果真需要实现“超链接”的话,在selection响应之后做如下调用就可以实现:

 

 

(四) 系统托盘Tray

SWT提供了托盘控件Tray,当点击某个缩小按钮的时候,可以把界面缩小到系统托盘处。

先获得系统托盘Tray tray = getDisplay().getSystemTray();

然后创建你自己程序的托盘图表TrayItem trayItem = new TrayItem(tray,SWT.NONE);

 

剩下就是显示逻辑了,当点击缩小按钮之后,将主界面setVisible(false),然后将trayItem.setVisible(true),就实现了缩小到托盘的逻辑。反之逆执行即可,通常我们还会给托盘图表加一个右键菜单之类的。

 

(五) SWT圆角窗口绘制

SWT窗口如果要使用自己的不规则图片做背景,就需要手动编码去处理png图片中那些透明的部分。可以说是一像素一像素去处理,比较繁琐,所以不推荐透明区域太大的图片(影响重绘的进度),基本做一个圆角什么就可以了。

 

这里提供一个函数来处理一个图片区域的透明部分:

 

首先获得整个界面的边界:

然后把透明处理之后的部分重新subtract一下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值