una - metodo setmodel java
Cómo mostrar la animación en una celda JTable (2)
Como dices, el mecanismo de renderizado JTable básico no es compatible con esto, un CellRenderer se usa para pintar una celda (o parte de una celda según sea necesario), y no permite el repintado, se dibuja a pedido.
Método 1 - JLayeredPane
Si tuviera que hacer esto, usaría un JLayeredPane para dibujar mis renderizadores animados sobre la JTable.
Sin embargo, creo que sería mucho trabajo. Necesitarías hacer mucho bien, especialmente si lo tienes dentro de un panel de desplazamiento. La jerarquía de contención sería algo así como:
JScrollPane -> (Viewport) JLayeredPane -> JTable & JPanel (transparente, con animaciones)
También tendrías un trabajo complicado al colocar nuestro panel para animaciones, o necesitarías un administrador de diseño personalizado para reflejar el ancho de las columnas de JTable, o usar algo como un GridLayout. Do-able, pero mucho trabajo.
Método2: CellRenderer personalizado y volver a pintar en Swing Timer
La única alternativa sería mantener una lista de las celdas que estaban animadas y luego mantener un temporizador de oscilación que las repitió repetidas veces. Luego, tendrías un CellRenderer personalizado haciendo la pintura de animación, con la pintura cambiando con el tiempo. Esto podría ser más simple, pero obtener la velocidad de fotogramas correcta sin consumir CPU, y recibir actualizaciones de repintados para que coincidan con las actualizaciones de la animación podría generar algunos efectos visuales extraños.
Estoy buscando una forma de mostrar un indicador de progreso animado (GIF animado, una rueda giratoria renderizada a través de Java2D, etc., sin preferencia aquí) en una celda de la tabla hasta que el valor que se mostrará finalmente se haya calculado o recuperado.
Hasta ahora, acabo de poner un texto estático de "pendiente ..." en cada celda que aún no está lista para acelerar la visualización. A medida que los datos llegan desde un hilo de fondo, los coloco en la celda apropiada y llamo a volver a pintar sobre la mesa.
Con una etiqueta o imagen estática, esto funciona bien, pero debido a que la representación de celda lo usa solo como una especie de sello de goma y no crea instancias separadas por celda (lo que por supuesto es una buena idea para el rendimiento) un GIF animado, por ejemplo, no "jugar" en las celdas individuales.
¿Cómo puedo lograr tal efecto? Haría una interfaz de usuario más "pulida" que solo un texto simple.
Primero fui con la misma idea que tenía Nick Fortescue (Método2). Sin embargo, justo después de eso tropecé con
donde el autor proporciona clases muy útiles para íconos animados (basados en GIF) así como también un indicador de progreso infinito Java2D (el famoso Mac OS X como rueda giratoria) el cual podría incluir en mi aplicación sin tener que preocuparme por la pintura. mí mismo.
Sin embargo, si no hubiera encontrado esto, el camino de Nick habría sido eso.