2016-03-03 115 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來完成。