双缓冲swt

时间:2016-03-03 15:50:30

标签: java swt

我正在创建简单的应用程序我有Tree对象,当用户选择一个SWTImageCanvas.loadImage(path)时,我会存储文件名。每个图像都定义了一些点,因此点显示为gc.fillOval。当用户将鼠标移到椭圆上时,通过设置一些额外的变量并使用SWTImageCanvas.redraw()方法显示名称。这样的重绘导致画布闪烁,所以我想到了双缓冲我已经阅读了一些有关它的教程但是当我试图运行它时,我的图像被白色的图层徘徊,上面有ovalls这里是我的绘图功能

    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 个答案:

答案 0 :(得分:1)

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