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上面绘制图片
@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()最好是通过事件触发)。