Java - DOUBLEBUFFER

 
Vista:

DOUBLEBUFFER

Publicado por Diego (7 intervenciones) el 16/12/2006 19:19:04
Hola vengo haber si alguien me puede explicar como utilizo el double buffer en aplicaciones para que no me parpadee cuando haga un movimiento por ejemplo en este codigo simple que hize todo el tiempo me parpadea cuando me muevo con las teclas direccionales =) AYUDA....

import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Libert extends Canvas{
static Libert crack;

static int x=200,y=100;
public static void main(String[] args) throws IOException{
Frame fushi = new Frame();
fushi.setBounds(0, 0, 300, 300);
crack= new Libert(){
public void paint(Graphics xiao){
int ancho=1024;
int alto=768;


xiao.setColor(Color.BLACK);
xiao.fillRect(1, 1, ancho-1, alto-1);
xiao.draw3DRect(0, 0, ancho-1, alto-1, false);
xiao.setColor(Color.YELLOW);

xiao.fillOval(x, y, 10,10);

}
};
fushi.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
System.exit(0); }} );
fushi.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent xiaoxiao){
switch (xiaoxiao.getKeyCode()) {
case KeyEvent.VK_UP :
if(y==1)
{
y=1;
}
else {y-=1;}

crack.repaint();
break;
case KeyEvent.VK_LEFT :
if(x==0){
x=0;}else{
x-=1;}

crack.repaint();
break;
case KeyEvent.VK_RIGHT :
if(x==280){
x=280;}
else{
x+=1;}

crack.repaint();
break;
case KeyEvent.VK_DOWN :
if(y==263){
y=263;}
else{
y=y+1;}
crack.repaint();
break;

} }} );
crack.requestFocus();
fushi.add(crack);
fushi.setVisible(true);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:DOUBLEBUFFER

Publicado por chuidiang (950 intervenciones) el 17/12/2006 21:30:20
Hola:

En el dibujo de un componente hay tres metodos importantes.

repaint() le dice a java que el componente necesita repintado. Es, como haces, al que hay que llamar para que el componente se repinte. Todo correcto. Cuando java vaya a repintar el componente, llamará a update().

update() borra el componente y llama a paint(). Si no quieres parpadeos, debes redefinir este método para que llame directamente a paint(), sin hacer el borrado

public void update(Graphics g)
{
paint(g);
}

paint() es el que pinta. Como no ha habido borrado, debe pintar TODOS los pixels o se te quedaran los del dibujo anterior. Para ello, una opción es pintar en un BufferedeImage vacio del mismo tamaño que el componente y luego, con g.drawImage() dibujarlo en el componente.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar