Forma en que se muestran cambios durante la ejecución

Iniciado por omaaraguirre, 29 Julio 2017, 21:05 PM

0 Miembros y 1 Visitante están viendo este tema.

omaaraguirre

Buen día.

Disculpen si accidentalmente no cumplo con alguna regla al momento de hacer este tema, es mi primera vez en el foro.

Tengo un frame en Java que busca en servidores (de bases de datos) los datos que tú le indiques. Tengo una jTable (parte inferior izquierda) donde se almacenan los resultados encontrados y también un jTextArea (parte derecha) que mi idea es que sirva como tipo "consola", donde se vaya registrando todo en lo que se está buscado. Para mayor comprensión les adjunto una captura de dicho frame.

En el jTextArea se agrega un renglón cada que se compara la cadena de búsqueda (mediante ciclos) con algún registro, columna o tabla. El detalle es que el jTextArea permanece en blanco hasta finalizar la búsqueda y se muestra todo de golpe. Me he percatado que es la forma "default" en la que he estado trabajando con java, ya que en todos los componentes sucede de igual manera.

Me gustaría saber cómo hacer para que en el transcurso de que se está ejecutando la búsqueda me vaya mostrando en el jTextArea renglón por renglón.

De antemano muchas gracias. Saludos!


ivancea96

Supongo que según buscas, vas agregando el texto en el JTextArea.

Supondré que no estás utilizando threads, así que:
El problema que tienes sería que, cuando te pones a buscar en las bases de datos, dejas el JFrame sin actualizar. ten en cuenta,q ue los eventos de ratón, de actualización y de dibujado de la ventana requieren tiempo de CPU. Si consumes el tiempo en hacer otra cosa, nos e va a actualizar hasta que acabes.

La solución podría ser crear un nuevo thread en el cual harás las peticiones. De este modo, el thread inicial sigue actualizando la ventana y recibiendo eventos (con lo cual podrás seguir pulsando botones e interactuando, cuidado, probablemente necesites bloquear los botones para que el usuario no haga varias cosas a la vez que no quieras, como ejecutar 2 búsquedas a la vez).

Dicho esto, no sé si has trabajado alguna vez con concurrencia, threads... Si la respuesta es no, lo mejor es que, o dejes esto para otro momento, más adelante, o empieces un nuevo proyecto <sin ventanas> para probar los threads y hacerte a su uso.
Si ya has trabajado con threads, te dejoe ste link que te puede ayudar en la concurrencia con Swing. Es un tutorial de Oracle: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

omaaraguirre

Cita de: ivancea96 en 30 Julio 2017, 00:57 AM
Supongo que según buscas, vas agregando el texto en el JTextArea.

Supondré que no estás utilizando threads, así que:
El problema que tienes sería que, cuando te pones a buscar en las bases de datos, dejas el JFrame sin actualizar. ten en cuenta,q ue los eventos de ratón, de actualización y de dibujado de la ventana requieren tiempo de CPU. Si consumes el tiempo en hacer otra cosa, nos e va a actualizar hasta que acabes.

La solución podría ser crear un nuevo thread en el cual harás las peticiones. De este modo, el thread inicial sigue actualizando la ventana y recibiendo eventos (con lo cual podrás seguir pulsando botones e interactuando, cuidado, probablemente necesites bloquear los botones para que el usuario no haga varias cosas a la vez que no quieras, como ejecutar 2 búsquedas a la vez).

Dicho esto, no sé si has trabajado alguna vez con concurrencia, threads... Si la respuesta es no, lo mejor es que, o dejes esto para otro momento, más adelante, o empieces un nuevo proyecto <sin ventanas> para probar los threads y hacerte a su uso.
Si ya has trabajado con threads, te dejoe ste link que te puede ayudar en la concurrencia con Swing. Es un tutorial de Oracle: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

Iván, me funcionó, quedó perfectamente como lo necesitaba. Era cuestión de ejecutar la búsqueda mediante un thread. Muchísimas gracias!