Мерцание в Java awt (как использовать буфер?)

#java #awt #buffer

#java #awt #буфер

Вопрос:

Частью моего кода является этот метод рисования:

 public void paint(Graphics g) {
    super.paint(g);
    refreshSize();
    paintSquares(g);
    if (drawGrid) {
        drawGrid(g);
    }
}
  

как я могу использовать буфер, чтобы остановить его мерцание?

Комментарии:

1. 1. не используйте paint для AWT без особых причин, 2. вместо этого используйте Swing, 3. зависит от нескольких факторов, 4. для лучшей помощи скорее опубликуйте SSCCE / MCVE, short, runnable, compilable

Ответ №1:

Вы можете уменьшить мерцание, перезаписав метод update (Graphics g) пустой реализацией (реализация update по умолчанию отображает фон). Если вы сделаете это, вы должны убедиться, что вы закрасили всю область компонента.

(Примечание: обновление перезаписи действительно помогает только для фрейма — другие компоненты все равно будут мерцать, потому что содержащий фрейм)

Тем не менее, сделайте себе одолжение и переключитесь на Swing.

Редактировать: немного покопавшись, фоновый рендеринг происходит в реализации update() java.awt.Container (Frame является подклассом Container ofc). В сочетании с рендерингом обратного буфера (который вам нужно будет обрабатывать самостоятельно, например, BufferedImage) вы могли бы получить то, что Swing автоматически предоставляет с помощью AWT.