SWT GC重绘心得

如果有需求要将Composite的边框颜色改成红色,大家肯定就想到用GC了,先给Composite添加Apaint监听这里我将这种方法称之为一,然后再实现重绘的方法,或者是直接GC gc = new GC(Composite)然后直接画了,将这种方法称之为二,那么我现在就来说说方法二法有什么问题,大家也可以做实验,搞个composite 添加双击事件 双击之后改变机框,相信大家都知道怎么写,然后最小化界面,在打开,大家可以发现颜色没了,这就说明这个方法是临时性的,你要想永久存在,还是得用监听;好的,那么大家现在将方法二换成方法一试试:完全可以实现,那么在原有的基础上在加一个Composite调用同一个改变边框颜色的方法试试,大家就会发现了,双击了某一个,这个Composite的边框颜色确实是变了,但是在双击另一个的时候就没反应了,这是为什么呢?这就是监听的慢哇,那么究竟是什么原因造成这种问题的呢?其实大家仔细想想就知道了,addPaintListener顾名思义,就是添加paint监听,每双击一次就添加一次,这样就会出现那种情况了,那么怎么样保证只添加一次呢?那就是添加之前删除引用;下面就给大家说说我遇到的实际情况吧:项目需求中需要根据一些值决定Composite的边框颜色,所以只用现有的PaintListener接口是不行的,所以我写了个MyPaintListener extends PaintListener代码如下:
package com.netunit.workbench.listeners;

import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;

public class MYPaintListener implements PaintListener {

private Color color = null;

public Color getColor() {
return color;
}

public void setColor(Color color) {
this.color = color;
}

@Override
public void paintControl(PaintEvent e) {
GC gc = e.gc;
gc.setForeground(color);
gc.drawRectangle(e.x, e.y, e.width - 1, e.height - 1);
gc = null;
}

}

MYPaintListener listener = new MYPaintListener();
FlashGot.setBorderColorWithApaint(listener, container, color);

	/**
* 更改控件边框颜色
*
* @param control
* @param color
*/
public static void setBorderColorWithApaint(MYPaintListener listener, Control control, final Color color) {

control.removePaintListener(listener);
listener.setColor(color);
control.addPaintListener(listener);
control.redraw();
}

代码基本上就这样了,如果有写的不好的地方还请大家多多指出,毕竟本人接触插件开发不久
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值