Refrescar contenido de un label

la_duda
14 de Diciembre del 2002
Buenos días,
Resumiendo, tengo un label dentro de un panel. Trato de actualizar el valor de ese Label según ciertas operaciones que se vayan realizando. Mi problema surge ya desde el principio. Supongamos que desde un botón, el cual lanza un proceso, intento actualizar el valor de ese label. Le asigno el valor correctamente, pero no lo muestra en la pantalla. El método creado para realizar esto es el siguiente:

public void estadoProgreso(String estado){
ivjJLabelProgreso.setText(estado);
//System.out.println(ivjJLabelProgreso.getText());
ivjJTextPanelProgreso.setText(estado);
}

Como se puede apreciar lo he tratado incluso con un Text Panel. Nada.
Si habilito la salida por consola puedo ver que efectivamente se asigna el valor al label.
He probado con el método repaint, el método show... nada.
¿Alguien sabe cómo puedo hacer que se refresque ese valor? Necesito que se muestre ese label actualizándose ya que es un proceso largo, y puede parecer que se queda bloqueada la aplicación. Se admiten sugerencias de otro control a usar!
Muchas gracias por todo,

Luismahou
14 de Diciembre del 2002
Hola!

Has mencionado la palabra "proceso". Si no he entendido mal, estas refrescando un label desde un hilo distinto al suyo? Si es así, el problema no es tuyo, sino de Swing, Swing y los Threads no se llevan muy bien que digamos. Da problemas si intentas hacer algo desde un hilo que no es el suyo.

Como sugerencia, mostraría un diálogo (modal) de espera mientras la aplicación ejecuta algo. Si lo quieres dejar de P.M. muestra el diálogo desde el hilo principal, y ejecuta otro hilo que realice la acción (a lo mejor la clase SwingWorker te puede ayudar). Lo de ejecutar crear un hilo para ejecutar la acción te lo digo para que cuando se mueva el diálogo se refresque lo que esté debajo del diálogo, sino se queda todo gris (no se refresca porque el hilo principal estaría realizando la acción).

Saludos,

Luismahou

la_duda
14 de Diciembre del 2002
Muchas gracias por tu contestación. Si, ya comprobé el problema que hay si trato de refrescar desde un Thread. Pero es que incluso antes de llamar a ese proceso, desde la misma ventana, al pulsar el botón...¿no debería refrescar le label?
Imagina una ventana con botón y label. Al pulsar el botón quiero que el label (antes de llamar al proceso) escriba otra cosa, y después llame al proceso. Al final he optado por poner un cursor de reloj, lo típico. Pero quiero que se vea que ha empezado ha hacer algo, que se refleje en el label. (Tengo en cuenta la sugerencia del dialog.)
¿Sabes algo de esto al respecto?

OLORaNUBE
14 de Diciembre del 2002
Yo tb tenía el mismo problema, y acabo de solucionarlo. Prueba esto:

componente_que_quieres_actualizar.paint(ventana.getGraphics());

Tb se puede utilizar el método update() entre otros.

PD: ¿Cómo se hace un cursor de reloj? Me quedaría bonito.