Java - La imagen parpadea demasiado al hacer repaint

 
Vista:

La imagen parpadea demasiado al hacer repaint

Publicado por José Manuel (3 intervenciones) el 23/11/2006 21:29:00
Hola, estoy pintando sobre un JPanel una cuadricula en la que relleno cada cuadro con una imagen jpg (mediante Image o BufferedImage, he probado ambas). Al hacer click sobre una de esas cuadrículas, capturo el evento y cambio la imagen para mostrar en ese cuadro. En ese justo momento llamo a repaint(), pero se produce un parpadeo de toda la imagen que queda un poco mal.

He probado con Image, con BufferedImage, y también con hacerle Repaint sólo al área, en cuestión, pero sigue ocurriendo lo mismo.

Si podéis darme algún consejo me ayudaríais mucho. Si no se entiende bien intento poner código.

Muchas gracias y un saludo.
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:La imagen parpadea demasiado al hacer repaint

Publicado por chuidiang (950 intervenciones) el 23/11/2006 22:52:12
Hola:

El método update() borra el panel y el metodo paint() lo pinta.

Si redefines el metodo paint(), se hace el borrado en el update() y luego el paint(), produciendo el parpadeo.

Si vas a pintar todo el panel, puedes redefinir update() para que llame directamente a paint().

public class MiClase extends JPanel
{
public void update (Graphics g)
{
paint(g);
}

public void paint (Graphics g)
{
// Aqui dibujas todos los pixels,
}
}

Si no dibujas todos los pixels, se quedarán sin borrar los anteriores. La forma de solucionar esto es en el paint() pintando en un BufferedImage vacio del tamaño del JPanel y pegando el Buffered en el JPanel.

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

RE:La imagen parpadea demasiado al hacer repaint

Publicado por José Manuel (3 intervenciones) el 24/11/2006 13:22:50
En el método paint dibujo todos los píxeles que hay sobre el panel.

He probado a redefinir el método update como dices arriba, y aún así se sigue produciendo parpadeo.

Entonces he intentado pintar primero sobre un BufferedImage como dices, y lo he hecho de esta forma dentro del método paint: (lo he simplificado un poco para pintar sólo las líneas de la cuadrícula)

public void paint(Graphics G)
{

super.paint(G);
G= cuadricula.getGraphics(); //cuadricula es el JPanel
Graphics2D fondo = (Graphics2D) G;

panel=new BufferedImage(cuadricula.getWidth(),cuadricula.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
Graphics2D Panel = panel.createGraphics();


//Método que sobre el Graphics2D pasado como argumento dibuja las líneas de
// una cuadrícula

pintarCuadricula(Panel);


fondo.drawImage(panel,0,0,cuadricula.getBackground(),null);

}

No sé si la manera de pegar la imagen en el JPanel es como lo he hecho en la última línea del metro. De todas formas, haciéndolo así sigue parpadeando mucho. Espero que haya alguna idea, estoy completamente desesperado.

Gracias y un saludo.
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

RE:La imagen parpadea demasiado al hacer repaint

Publicado por José Manuel (3 intervenciones) el 24/11/2006 13:24:56
Bueno, siendo sincero, en lugar de hacer una llamada a repaint() he llamado a repaint(0,0,1,1) haciendo pruebas, y redibuja sin parpadear... pero me parece una cutrada, espero hallar una manera seria de conseguirlo. Gracias.
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