es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo agregar un panel de control en una fila de JTable al pasar el mouse sobre ella (hover)

Tengo una tabla no editable, en la que me gustaría mostrar un panel contextual de fila (probablemente un JPanel). Algo así como lo que hace Gmail: cuando se mueve el ratón sobre las filas de correo, aparece una barra de herramientas simple en esa fila específica.

Al igual que en Gmail, la acción de los controles que quiero mostrar no editará los valores, en su lugar utilizarán el valor de la fila para realizar algún trabajo de oferta.

He probado con lo siguiente:

  • TableCellRenderer, la visualización funciona mayormente, pero tiene limitaciones:
    • El componente solo se utiliza para renderizar y no se puede utilizar para agregar varios botones.
    • Requiere otra columna.
    • Para el comportamiento de desplazamiento (es decir, mostrar en la fila solo cuando el mouse está sobre la fila), se requiere la colaboración del MouseListener de la tabla.
  • TableCellEditor, mi tabla no es editable, por lo que tampoco se llama al editor de celdas.
    • También requiere una columna específica.
    • También requiere la colaboración del MouseListener de la tabla.
  • MouseMotionListener se puede usar para mostrar un popup para ciertas coordenadas.
    • El popup parece ser el componente correcto para esto.
    • Hay bastante código para manejar el ciclo de vida del popup (cerrándolo cuando el mouse se mueve fuera de la fila, no volviendo a abrir un popup si ya hay uno abierto).
  • Consejos: por lo que sé, la herramienta de consejos de swing no permite tener componentes de control como botones, etc.

He hecho preguntas y respuestas relacionadas en Stack Overflow. Pero todas requieren agregar una columna para mostrar y usar estos componentes de swing.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto IT especializado en Java, Swing y JTable, he encontrado esta pregunta antes. Para mostrar un panel contextual de fila, como el de Gmail, en una tabla no editable sin agregar otra columna, el uso de un TableCellRenderer o TableCellEditor no funcionará. Sin embargo, se puede usar un MouseMotionListener para mostrar un popup para coordenadas específicas. El popup podría ser el componente adecuado para esto, pero hay bastante código para manejar el ciclo de vida del popup, como cerrarlo cuando el mouse se mueve fuera de la fila o no volver a abrir un popup si ya hay uno abierto. Las herramientas de Swing no admiten componentes de control como botones, lo que es otra limitación.

Comments are closed.