双缓冲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
来完成。
我正在创建一个简单的应用程序,我有 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
来完成。