Java -практика использования

        

Двойная буферизация



Листинг 15.11. Двойная буферизация с помощью класса Bufferedimage

public void update(Graphics g){ 

Graphics2D g2 = (Graphics2D},g; 

int w = getSize().width, h = getSize().height;



// Создаем изображение-буфер в оперативной памяти 

Bufferedimage bi = (Bufferedimage)createlmage(w, h);

// Создаем графический контекст буфера 

Graphics2D big = bi.createGraphics();

// Устанавливаем цвет фона 

big.setColor(getBackground());

// Очищаем буфер цветом фона 

big.clearRect(0, 0, w, h);

// Восстанавливаем текущий цвет 

big.setColor(getForeground());

// Выводим что-нибудь в графический контекст big 

// ...

// Выводим буфер на экран 

g2.drawImage(bi, 0, 0, this);
 

}

Метод двойной буферизации стал фактическим стандартом вывода изменяющихся изображений, а в библиотеке Swing он применяется автоматически.

Данный метод удобен и при перерисовке отдельных частей изображения. В этом случае в изображении-буфере рисуется неизменяемая часть изображения, а в методе paint() — то, что меняется при каждой перерисовке.

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



Содержание раздела