Duda acerca de repaint

Isma
28 de Septiembre del 2005
Hola a [email protected]:

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

mejor es c++
28 de Septiembre del 2005
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

isma
28 de Septiembre del 2005
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

luciernaga
28 de Septiembre del 2005
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

mejor es c++
28 de Septiembre del 2005
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

chuidiang
28 de Septiembre del 2005
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.