0
Double buffer yöntemi çizimlerdeki titremeyi engellemek için kullanılan bir yöntem. Bu titremeye flicker deniliyor.
Bu kod örneğinde iki sınıf var, birinde double buffer kullanılarak diğerinde de kullanılmadan ekranda bir kare hareket ettiriliyor. Kodu DoubleBufferEx. java adında bir dosyaya kaydedip çalıştırabilirsiniz. main() metodunun içinde istediğiniz örneğin komentini kaldırarak çalıştırın.
import java.awt.*;
import java.awt. event.*;
import javax. swing.JFrame;
public class DoubleBufferEx extends JFrame{
Image db;
Graphics g2;
int counter;
public DoubleBufferEx(){
setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
setSize(500,500);
setVisible(true);
db=createImage(500,500);
g2 = db .getGraphics();
start();
}
public void start(){
while(true){
try{
Thread. sleep(10);
counter++;
repaint(); //paint metodunu tekrar calistirir
}catch(Exception e){
}
}
}
public static void main(String[] args) {
//buradaki komenti kaldirarak double buffer olmadan nasil calistigini gorebilirsiniz
//new normalEx();
new DoubleBufferEx();
}
public void paint(Graphics g){
g2.clearRect(0,0,500,500);
g2.fillRect(counter, counter,100,100);
g.drawImage(db,0,0,this);
}
}
//Doublebuffer kullanilmayan sinif
class normalEx extends JFrame{
int counter;
public normalEx(){
setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
setSize(500,500);
setVisible(true);
start();
}
public void start(){
while(true){
try{
Thread. sleep(10);
counter++;
repaint();
}catch(Exception e){
}
}
}
public static void main(String[] args) {
new DoubleBufferEx();
}
public void paint(Graphics g){
g.clearRect(0,0,500,500);
g.fillRect(counter, counter,100,100);
}
}