Duda acerca de repaint
Hola a tod@s:
Tengo una duda acerca del metodo repaint() que no consigo solucionar.
Tengo un canvas que representa un tablero de ajedrez y sobre el dibujo las piezas y las casillas vacias. Para ello cargo las imagenes del modo:
vacio_negro = new ImageIcon ("b_empty.gif").getImage();
teniendo en el directorio los gif con todas las casillas. Despues en el metodo paint las dibujo asi:
gdrawImage(imagen,x,y,ancho,alto,this);
Mi problema es que al llamar a repaint desde otra clase no me repinta el canvas hasta que paso una ventana por encima o le modifico el tamaño, es decir, no me deja forzar el repintado del dibujo si no cambio las propiedades del frame que lo contiene.
Por si sirve de ayuda tengo el cambas en el Panel central de un BorderLayout.
Por favor contestarme pronto si podeis porque a este ritmo me voy a volver loco.
Muchas gracias a todos por anticipado
Tengo una duda acerca del metodo repaint() que no consigo solucionar.
Tengo un canvas que representa un tablero de ajedrez y sobre el dibujo las piezas y las casillas vacias. Para ello cargo las imagenes del modo:
vacio_negro = new ImageIcon ("b_empty.gif").getImage();
teniendo en el directorio los gif con todas las casillas. Despues en el metodo paint las dibujo asi:
gdrawImage(imagen,x,y,ancho,alto,this);
Mi problema es que al llamar a repaint desde otra clase no me repinta el canvas hasta que paso una ventana por encima o le modifico el tamaño, es decir, no me deja forzar el repintado del dibujo si no cambio las propiedades del frame que lo contiene.
Por si sirve de ayuda tengo el cambas en el Panel central de un BorderLayout.
Por favor contestarme pronto si podeis porque a este ritmo me voy a volver loco.
Muchas gracias a todos por anticipado
el problema de seguro esta en tus metodos paint y update... no se muy bien como estaras definiedo las cosas pero proba poner
public void paint(Graphics g) { update(g); }
o
public void update(Graphics g) { paint(g); }
y redefini el otro metodo con el codigo que corresponda
public void paint(Graphics g) { update(g); }
o
public void update(Graphics g) { paint(g); }
y redefini el otro metodo con el codigo que corresponda
Te agradezco mucho tu consejo pero no me ha solucionado el problema. Con ninguna de las dos formas he conseguido que me refresque en el momento de llamar a repaint(). Sigo teniendo que deslizar una ventana sobre el tablero.
Muchas gracias de todas formas
Muchas gracias de todas formas
hola, a mi me paso algo similar y creo q si cada vez que pones la ficha llama a repaint pero del canvas donde tienes las fichas, y ojo tienes que poner el codigo tanto en paint como en update.
Espero que te valga
ciao
Espero que te valga
ciao
Tenes que seguir la linea de llamadas que hace el repaint.. llama a update y luego a paint... sin duda estas treniendo un error en lo que deberian hacer pero no hacen tus metodos... si estas trabajando con varias clases contenidas, presta atencion al orden de las llamadas... por ejemplo la clase contenedora debe enviar la llamada paint a sus componentes, y estos deben dibujarse sin llamar a su update por defecto...
En el momento de pintar un componente la clase contenedora se encarga de dibujar el elemnto que corresponda sin borrar lo que no debe...
Si aun no resuleves el problema tengo un ejemplo que podria buscar para enviartelo.
Saludos
En el momento de pintar un componente la clase contenedora se encarga de dibujar el elemnto que corresponda sin borrar lo que no debe...
Si aun no resuleves el problema tengo un ejemplo que podria buscar para enviartelo.
Saludos
Hola:
Teóricamente el tema es sencillo. Sólo tienes que heredar del Canvas y redefinir el método paint() para que pinte lo que tú quieras.
Los métodos update() y repaint() no debes tocarlos.
El único truco es que tienes que cambiar los datos que el Canvas pinta en su paint() antes de llamar al repaint(). Tienes un ejemplo tonto en http://www.geocities.com/chuidiang/java/graficos/simple/grafico_simple.html
Otra tonterÃa, el Canvas no tiene tamaño por defecto. Llama a un setSize() para darle un tamaño mÃnimo después de crearlo.
Se bueno.
Teóricamente el tema es sencillo. Sólo tienes que heredar del Canvas y redefinir el método paint() para que pinte lo que tú quieras.
Los métodos update() y repaint() no debes tocarlos.
El único truco es que tienes que cambiar los datos que el Canvas pinta en su paint() antes de llamar al repaint(). Tienes un ejemplo tonto en http://www.geocities.com/chuidiang/java/graficos/simple/grafico_simple.html
Otra tonterÃa, el Canvas no tiene tamaño por defecto. Llama a un setSize() para darle un tamaño mÃnimo después de crearlo.
Se bueno.