una - como obtener los valores de un jtable en java
JTable para representar un nĂºmero desconocido de filas (2)
Tienes 2 posibilidades:
- Escribir consulta, que devuelve el número de filas, y luego implementar el modelo de tabla, que intenta cargar filas de la base de datos, si la tabla desea mostrar las filas que no están en el modelo. En este caso, necesita la tercera consulta, que puede indexar las filas cargadas (estas consultas son posibles en MS-SQL y Oracle). Por ejemplo: carga las primeras 100 filas y la cantidad de resultados. Si se le pide al modelo de tabla filas desde la posición 100 a 199, realiza una nueva consulta, que carga el intervalo de filas (si es posible para su base de datos) o intenta iterar sobre su conjunto de resultados y carga el siguiente lote de datos. Pero si el usuario presiona la tecla "Finalizar", definitivamente necesita la carga basada en el índice (o necesita iterar sobre el conjunto de resultados completo).
- Usted escribe el modelo, que muestra el primer lote (por ejemplo, 100 filas). Si el usuario se desplaza para ver la última fila (model.getValueAt (row, col) -> col == 99) simplemente le pide el conjunto de resultados para el próximo lote y agrega las nuevas filas al modelo.
La primera variante es mejor para el usuario (porque el usuario puede ver qué tan grande es la tabla y puede desplazarse directamente a la última fila), pero la segunda es más fácil de implementar porque no necesita la carga de filas basada en índices.
Tengo una consulta de base de datos que devuelve una gran cantidad de filas. JDBC
no te dice cuántas filas vuelven y hay demasiadas filas para contarlas antes de mostrarlas en una JTable
.
Entonces, el modelo con el que estoy trabajando es Iterable<R>
, pero desafortunadamente, TableRowModel
tiene que saber el conteo de filas por adelantado.
Puedo imaginar algunas estrategias que podrían funcionar:
- Cargue todas las filas, pero hágalo en segundo plano y agréguelas al modelo en lotes.
- De alguna manera detectar las solicitudes para renderizar las filas más bajas (a través del modelo, supongo) y dinámicamente cargar más filas si esto sucede.
- Tener un botón en la pantalla para cargar más filas explícitamente.
- Algún tipo de componente
non-JTable
que admite filas de procesamiento sin conocer el recuento de filas por adelantado (ideal, pero no puedo encontrar uno).
Me pregunto si existe una forma "normal" de hacerlo, porque no es frecuente que vea este tipo de cosas en una interfaz de usuario. Las pocas herramientas JDBC
que he revisado (pensé que sería la mejor opción) parecen cargar los resultados con entusiasmo o buscarlos en la página (como usuario, realmente no me gusta la paginación en aplicaciones GUI, así que me gustaría evitar eso).
Operaciones como "Encontrar" sobre la mesa idealmente deberían funcionar de una manera "comprensible" ... así que parece que esto no será demasiado fácil.
Use un SwingWorker
en su implementación de AbstractTableModel
. Deje que el trabajador particione la consulta para que haya un número razonable de registros disponibles de forma oportuna, mientras que el resto se lee en segundo plano. Use un PropertyChangeListener
para mostrar el progreso e implementar un botón de cancelar.