JAVA SWT 绘图过程中,如何删除绘制的图片或者直线等?

本文介绍使用SWT Canvas组件进行图形绘制的方法,包括如何利用GC对象绘图,如何正确使用Canvas的redraw方法实现图形更新,以及如何处理窗口大小变化时的图形显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Image image=new Image(display,"E:\\\\eclipse\\\\icon\\\\1.ico");

  canvas.addPaintListener(new PaintListener() {
   @Override
       public void paintControl(PaintEvent arg0) {
        // TODO Auto-generated method stub
        arg0.gc.drawImage(image, 10, 10);    //在canvas上面绘制图片
        // arg0.gc.drawline(0,0,10,10); 或者是绘制直线
   }
  });
但是如何删除绘制的image或者直线呢?如何利用canvas.redraw()?

其实当调用canvas.redraw()的时候触发的就是 paintControl中的方法(切记 canvas.redraw()不要写到 paintControl ,会闪屏),也就是说我们在绘图的时候,首先采用GC绘图即:创建gc:GC gc=new GC(canvas),然后gc. drawImage(……)或者 gc. drawline(……)。但是此时你会发现当你对窗口做放大缩小等任何修改窗口大小的操作的时候图片或直线等就会消失。但是如果你直接通过在绘图监听器对象中绘图,就像上述方法的时候,绘图的结果只会在触发窗口大小(最大化,最小化的时候)出现。所以正确的绘图就是首先通过gc绘图,然后如果要确保窗口有操作后仍然能够显示图片就必须在paintControl重新再绘制一遍。

那么删除绘制的图片或者直线就很简单了,确保在 paintControl中不做任何操作,然后通过设置按键或者鼠标事件触发canvas.redraw()方法即可。如果要实现直线的移动,图片的移动操作,不必要去通过绘制白色直线或者白色矩形进行覆盖原始图片,直接在 paintControl通过新的直线位置和图片位置再绘制一遍(这里面可以通过调用自定义重绘类的自定义绘图方法实现动态重绘效果),然后同样是通过 设置按键或者鼠标事件触发canvas.redraw()方法即可(注意这个canvas.redraw()最好是通过事件触发)。

希望对大家有用,我当初就是通过绘制白色直线和矩形的方法覆盖原始内容,后来查阅资料和询问才基本搞清楚redraw()的用法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值