我在canvas上添加了两个event,一个mouseDown,一个paintControl。要实现的是鼠标按下后在canvas上画出一个小圈(小圆),而且画过的这些小圈还保留在canvas上。 
    下面是我的部分程序,目前只能点一个出来一个,但是之前的点就没了。应该怎么修改呢?
    还有,之后我要做的是不规则三角网TIN的生成,逐点插入法。在生成过程中动态的删除基于上述某两个点连的直线应该怎么写代码?或者用到什么方法?
canvas.addPaintListener(new PaintListener() {
public void paintControl(final PaintEvent e) {
Display display = e.display;
GC gc = e.gc;//为每个操作单独提供gc
//获取widget大小
Rectangle rect = canvas.getClientArea();
//创建双缓冲
Image buffer = new Image(display,rect.width,rect.height);
//为缓冲区创建图形上下文
GC bufferGC = new GC(buffer);
//绘制操作   
bufferGC.drawOval(x, y, 3, 3);
//在canvas中绘制图像
gc.drawImage(buffer, 0, 0);
//canvas.redraw();会造成屏闪,而且以前的点会消失
//释放GC object
bufferGC.dispose();
buffer.dispose();
//使用下面方式也可以,但是没有创建双缓冲
//GC gc=e.gc;
//gc.drawOval(x, y, 3, 3);
}
});  //画布中鼠标事件监听
canvas.addMouseListener(new MouseAdapter() {
public void mouseDown(final MouseEvent e) {
x=e.x;
y=e.y;
canvas.redraw();
}
});

解决方案 »

  1.   

    canvas.redraw();
    因为你调用这个了.事件监听每次都重新刷新一下.所以前次的就没了.
      

  2.   

    那我应该怎么做呢?如果不加那个canvas.redraw()的话,我必须要改变一次窗口大小、或者切换一次才能看到;而且再点一次,还是一个点。
      

  3.   

    把以前画的点坐标保存下来,.redraw的时候把这些点也要重新绘制