2016-03-03 109 views
0

我正在创建简单的应用程序,我有Tree对象,我在用户选择一个时存储文件名SWTImageCanvas.loadImage(path)被调用。每个图像都有一些定义的点,因此点显示为gc.fillOval。当用户将鼠标移动到椭圆上时,将通过设置一些附加变量并使用SWTImageCanvas.redraw()方法来显示该名称。此重新引起帆布闪烁,所以我想到了双缓冲我读过一些关于它的教程,但是当我试图运行它,我的形象是由白色层徘徊与它ovalls这里是我的绘图功能双缓冲swt

private void drawStations(Event e) { 
Rectangle clientRect = mainSWTImageCanvas.getClientArea(); 
     if(mainSWTImageCanvas.getSourceImage()!=null) 
      { 
       if(mainSWTImageCanvas.getScreenImage()!=null) 
        mainSWTImageCanvas.getScreenImage().dispose(); 
       Image screenImage = new Image(mainSWTImageCanvas.getDisplay(),clientRect.width,clientRect.height); 
       this.gc = new GC(screenImage); 
     //drawing ovals on gc 
     . 
     . 
     . 
     this.gc.drawImage(screenImage, 0, 0); 
       this.gc.dispose(); 
       e.gc.drawImage(screenImage, 0, 0); 
    } 

回答

1

事实证明,swt display中的双缓冲可以通过在构造函数中传递SWT.DOUBLE_BUFFERED来完成。