Foros del Web » Programación para mayores de 30 ;) » Java »

Hace un delay dibujando en un JFrame... urgente por favor

Estas en el tema de Hace un delay dibujando en un JFrame... urgente por favor en el foro de Java en Foros del Web. Hola amigos. Necesito por favor de su ayuda. Estoy dibujando unos ovalos dentro de un JFrame. Estos ovalos necesito dibujarlos con un delay de cierto ...
  #1 (permalink)  
Antiguo 27/10/2006, 15:30
 
Fecha de Ingreso: abril-2006
Mensajes: 133
Antigüedad: 18 años
Puntos: 2
Hace un delay dibujando en un JFrame... urgente por favor

Hola amigos.
Necesito por favor de su ayuda.
Estoy dibujando unos ovalos dentro de un JFrame. Estos ovalos necesito dibujarlos con un delay de cierto tiempo.
He tratado con thread sleep, con timers, etc. El problema, es que el delay si se hace, pero el dibujo se hace despues de que paso el tiempo del delay. O sea el dibujo se hace de un solo golpe, y necesito que durante tiempo de ejecucion se vea la pausa entre dibujo y dibujo.

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 27/10/2006, 16:05
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Por el problema que tienes, supongo que los dibujos se hacen a consecuencia de la pulsación de algún botón o evento de teclado.

Si es así, lanza un hilo para dibujar los ovalos y devuelve el control (return del actionPerformed o el metodo que sea) lo antes posible.

Dentro del hilo, haz un bucle para pintar los ovalos. Después de pintar cada ovalo, llama al método repaint() del Frame (o del componente en el que estés dibujando) y haz un retardo con Thread.sleep().

El método run() del hilo te deberia quedar más o menos así

Código:
public void run()
{
   bucle para 8 ovalos
   {
      dibujar ovalo
      llamar a repaint() del componente
      Thread.sleep(...)
   }
}
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 27/10/2006, 16:20
 
Fecha de Ingreso: abril-2006
Mensajes: 133
Antigüedad: 18 años
Puntos: 2
Muchas gracias colega. El problema es que no estoy haciendo ningun evento con el teclado o el mouse, si no que se dibuja solo. Basicamente es esto:

un JFrame:
public void Ventana(){
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new Mapa8());
f.setSize(450,475);
f.setLocation(350,200);
f.setVisible(true);
}

luego esta es la rutina de dibujo:

public void Impresion(Graphics g){//dibuja el rastro de la hormiga exploradora
g.setColor(Color.lightGray);
g.drawOval(x*40-40,y*40-40, 40, 40);
g.fillOval(x*40-40,y*40-40, 40, 40);
g.setColor(Color.GRAY);
g.drawOval(x*40-40,y*40-40, 40, 40);
}

Este metodo impresion lo pongo en un for, y lo que tengo que hacer es retrasar la impresion un segundo. Sin embargo, si uso un thread sleep o un timer, el delay se realiza, pero me dibuja todos los ovalos de un solo golpe, y lo que necesito es ir viendo los ovalos dibujados uno por uno en un intervalo de tiempo.

Ojala y te sirva esto como referencia.

Muchas gracias amigo.
  #4 (permalink)  
Antiguo 27/10/2006, 19:39
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Hereda de algún componente y redefine el método paint(Graphics g). Ahí es donde tienes que meter el bucle. El resto es como te comenté antes, dentro del bucle pintar ovalo, llamar a repaint y sleep().

Se bueno.
__________________
Apuntes Java
Wiki de Programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:46.