双缓冲swt

Double buffering swt

我正在创建一个简单的应用程序,我有 Tree 对象,当用户选择 SWTImageCanvas.loadImage(path) 时,我在其中存储文件名。每个图像都定义了一些点,因此点显示为 gc.fillOval。当用户将鼠标移到椭圆上时,它的名称就会显示出来,我通过设置一些额外的变量并使用 SWTImageCanvas.redraw() 方法来实现这一点。这种重绘会导致 canvas 闪烁,所以我考虑过双缓冲,我已经阅读了一些关于它的教程,但是当我尝试 运行 它时,我的图像被白色层悬停,上面有椭圆形这是我的绘图函数

    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);
    }

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