SWT Canvas PaintListener () вызывается неправильно

1

У меня есть следующий код:

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() с регулярными интервалами времени. Изображения отображаются с определенными временными интервалами, но в любое время, когда я перемещаю окно над холстом или сводя к минимуму пользовательский интерфейс и увеличивая его снова, прослушиватель краски вызывается и рисует следующее изображение. Я не наблюдаю этого поведения на Linux/Mac OS, но только на окнах. Я не знаю, что случилось!

Cnvs определяется таким образом

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

Я даже попытался использовать

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

но это не сработает!

Любая помощь будет оценена. благодаря

Теги:
canvas
listener
swt
paint

1 ответ

2
Лучший ответ

Ничего, все работает отлично.

"Классы, которые реализуют этот интерфейс, предоставляют методы, которые обрабатывают события, которые генерируются, когда элемент управления нужно нарисовать".

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

Если вы изменяете размер или перемещаете окно, может потребоваться перерисовать холст (например, когда окно становится настолько маленьким, что часть холста скрыта).

Поскольку SWT использует собственные компоненты, это может вести себя по-разному в разных ОС

  • 0
    Ну, мое окно не изменяемого размера. По какой причине слушатель рисования ведет себя так только на окнах? Есть ли способ избежать такого поведения или альтернативы?
  • 1
    Хорошо, но так как вы можете переместить его, он будет перерисован из ОС. Ваш дизайн выглядит немного странно, но слушатель не для этого. Почему бы вам не извлечь элементы рисования в новом методе и периодически вызывать его? И, к вопросу о Windows: SWT использует нативные компоненты ОС.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню