Двойная буферизация
Листинг 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 (), по заданному закону изменения изображения. В результате красный мячик прыгает на фоне изображения.