Java - Dibujo con Canvas

 
Vista:

Dibujo con Canvas

Publicado por Yolanda (5 intervenciones) el 05/01/2006 15:11:09
Hola!
Tengo un problema con un objeto Canvas. Yo realizo un dibujo en un objeto Canvas, pero si cambio el tamaño del Frame donde se encuentra o pongo el foco en otra aplicación; todo lo dibujado desaparece. A qué puede ser debido.
Es la 1º vez que trabajo con Canvas y no sé porqué puede ser
Gracias!!
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

RE:Dibujo con Canvas

Publicado por PsyBoy (39 intervenciones) el 06/01/2006 04:11:04
bueno, primero ya no se trabaja con canvas, ahora, usas un JPanel para dibujar, ahora, para q no se borre el dibujo debes hacer un "buffer" de dibujo, osea, un Graphics que lo guardas y siempre q se repinte lo volves a dibujar
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
sin imagen de perfil

RE:Dibujo con Canvas

Publicado por chuidiang (950 intervenciones) el 09/01/2006 14:57:13
Hola:

Canvas es el objeto adecuado para dibujar. En un JPanel (o en cualquier otro componente) también se puede dibujar, pero estas cargando con código que no necesitas. Por ejemplo, un JPanel tiene código para dibujar los componentes que contiene. Si tu quieres dibujar y no meterle componentes todo ese código te sobra y no tienes por qué cargar con él.

Es cierto que Canvas pertenece a awt, una librería antigua que ha sido reemplazada por swing. Sin embargo en swing no hay un componente específico para dibujar sobre él (si acaso el más simple de todos, que es JComponent). Por ello, yo al menos, sigo usando Canvas para dibujar.

Para dibujar en un Canvas y no tener problemas de que se te borre (o en cualquier otro componente java), debes heredar de él y redefinir el método paint(Graphics g). Este método es el que debe dibujar lo que quieras en el canvas. Cada vez que se ponga una ventana encima o se cambie el tamaño de la ventana o en general, cada vez que el Canvas necesite repintado, java se encargará de llamar a paint () y se redibujará tu dibujo.

Tienes un pequeño tutorial sobre esto en http://www.geocities.com/chuidiang2/graficos/simple/grafico_simple.html

Se buena.
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:Dibujo con Canvas

Publicado por Yolanda (5 intervenciones) el 10/01/2006 17:26:46
Gracias por la ayuda, pero.... sigo teniendo problemas. Me explico. Tengo un Frame que contiene un JPanel (con botones) y un Canvas. Y sí utilizo para pintar el Canvas.
Lo que hago es: cuando hago click en un botón del JPanel (seleccionando una acción de las posibles) voy al Canvas y en el evento de hacer click (creo que se llama MousePressed, ahora no estoy segura) llamo al método paint() que he definido en mi clase que dervia de Canvas. Cada vez que hago click en el Canvas, pinto según la opción que tenga seleccionada.
Pero si cambio de aplicación o la redimensiono, sigo con los problemas: se me borra y el objecto Canvas me aparece en blanco.
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
sin imagen de perfil

RE:Dibujo con Canvas

Publicado por chuidiang (950 intervenciones) el 10/01/2006 22:18:56
Hola:

El método paint() del Canvas debe redefinir el método original. Revisa que está definido exactamente igual que el del padre, es decir, algo como esto

public void paint (Graphics g)

Cuando necesites repintar, deberías llamar a repaint(), no a paint().

Echa un ojo en el link que te mandé anteriormente. Ahi ves que al pulsar el botón se redibuja el Canvas. Prueba si quieres a instanciar la clase del ejemplo en un Frame en vez de un Applet y ver si funciona correctamente. Luego intenta ver diferencias con la tuya.

Otra opción es que pongas aquí el código de tu Canvas (supongo que basta con el método paint()), a ver si vemos algo raro.

Se buena.
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:Dibujo con Canvas

Publicado por Yolanda (5 intervenciones) el 12/01/2006 17:13:32
Hola. He mirado el enlace que pusiste, y... me basé en ese para hacer el mío. Yo creo que hago lo mismo, pero no lo sé.
Mi código simplificado es como sigue. solamente he puesto parte de la clase que hereda del Canvas:

public class Lienzo extends Canvas{
public Lienzo (){
.......
}

public void paint (Graphics g){
.....
g.Fill3DRect(px,py,50,50,false);
...
}

public void this_moussedPressed (MouseEvent e){
Graphics g = getGraphics();
this.paint(g);

// Esto es lo que tenía en un principio, y probé a hacer lo siguiente:
repaint() // ==> Pero con esto también se me borra todo lo que voy dibujando si redimensiono el Frame donde se encuentra todo o me cambio de aplicación.
}

No sé si con esto podrás ayudarme. De todas maneras; muchas gracias.
Ciao.
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:Dibujo con Canvas

Publicado por kikcode (1 intervención) el 19/05/2006 12:00:43
hola, ya tiene tiempo este hilo pero espero que lo leas...

prueba esto:

class GestorVentana extends ComponentAdapter implements ComponentListener{
public void componentResized(ComponentEvent ce){
if (TU_VARIABLE_CANVAS!=null){
TU_VARIABLE_CANVAS.repaint();
}
}
}

i luego añade el Listener a tu variable:

GestorVentana Reescalado=new GestorVentana();

TU_VARIABLE_CANVAS.addComponentListener(Reescalado);

esto lo que hace es que repinte tu canvas cada vez que el componente recibe de tamaño, cada vez que cambi de tamaño el canvas envia un evento a esta clase i dispara el repaint

espero que te sirva de ayuda
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