¿Puedo ejecutar acciones GUI 2 en la EDT?
Pregunta
En un JDialog, cuando el usuario hace clic en un JButton quiero para ejecutar acciones GUI 2 en el EDT:
- Mostrando otra pequeña JDialog con un icono de ocupado en ella para indicar al usuario "Por favor, espere mientras que los extremos proceso equivocado".
- Inserción de un gran número de registros en un JTable.
Cuando intento ejecutar ambas acciones el "por favor espere" bloques de diálogo del proceso de inserción, como se esperaba.
Como se puede ver que ambas acciones se debe hacer de manera EDT ... ¿hay una solución para esto?
Solución
No, ambas acciones no deben ser ejecutados en el EDT.
Sus registros no debe ser insertado en el JTable, sino más bien en su TableModel, desencadenando eventos de actualización. De esta manera, usted puede fácilmente haber actualizado la tabla mientras se muestra el cuadro de diálogo.
Una vez que se actualiza el modelo de tabla, se disparó un evento para garantizar tabla se repintado, y funcionará.
Otros consejos
La segunda cosa no tiene que ser hecho en el EDT. Engendro de un hilo para agregar los elementos al modelo de la JTable, pero tienen que utilizar hilo de vez en cuando SwingWorker.invokeLater () para disparar "fireTableDataChanged" eventos.
La mayoría de TableModels, por ejemplo, el DefaultTableModel, invocar los métodos fireXXX tan pronto como el modelo se actualiza de modo que sí desea que la actualización del modelo que hacer en la EDT lo que la tabla se repintó correctamente.
"Por favor espere mientras el proceso equivocado extremos".
Utilizar un indeterminada JProgressBar
A continuación, se puede actualizar el modelo que se desee sin que el bloqueo.