SWT Canvas PaintListener()被错误地调用

时间:2014-05-22 07:10:56

标签: java canvas swt listener paint

我有以下代码:

cnvs.addPaintListener(new PaintListener() {
    public void paintControl(PaintEvent e) {
        e.gc.drawImage(img, 0, 0, img.getImageData().width,
                       img.getImageData().height, 0, 0,
                   cnvs.getSize().x, cnvs.getSize().y);
        if (curImg >= 0 && curImg < IMG_COUNT - 1) curImg++;
        else curImg=0;
    }
});

我显示由cnvs.redraw()以固定时间间隔调用的图像序列。图像以指定的时间间隔显示,但无论何时我在画布上移动窗口或最小化UI并再次最大化它,都会调用绘图侦听器并绘制下一个图像。我在Linux / Mac OS上没有观察到这种行为,但仅限于Windows。我不知道什么是错的!

cnvs以这种方式定义

 cnvs = new Canvas(customContainer, SWT.NONE);

我甚至尝试过使用

cnvs = new Canvas(customContainer,SWT.DOUBLE_BUFFERED|SWT.NO_REDRAW_RESIZE);

但它不起作用!

任何帮助将不胜感激。 感谢

1 个答案:

答案 0 :(得分:2)

没什么,一切正常。

  

&#34;实现此接口的类提供了处理的方法   需要绘制控件时生成的事件。&#34;

来自JavaDoc(http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Fevents%2FPaintListener.html)。

如果您调整窗口大小或移动窗口,可能需要重绘画布(例如,当窗口变得太小以至于隐藏了画布的一部分时)。

由于SWT使用本机组件,因此在不同的操作系统上可能会有所不同