[ Foro de Java ]

selección de filas jtable java

28-Jan-2023 19:46
Invitado (Sergio Armando COMES)
2 Respuestas

Cuando renderizo las celdas de una fila y quiero luego seleccionar la fila, no puedo hacerlo con un click de mouse pero si alguna/s celda/s en la fila no está/n renderizada/s al hacer click sobre la fila y sobre alguna celda no renderizada, se enfatizan solamente aquellas celdas no renderizadas. ¿Sería posible seleccionar una fila completa en la que todas sus celdas se encuentren renderizadas?


14-Mar-2023 22:58
Invitado (Alejandro Andrade)

Sí, es posible seleccionar una fila completa en la que todas sus celdas se encuentren renderizadas. El problema que estás experimentando puede deberse a que el renderizado personalizado que estás aplicando a las celdas está interfiriendo con el mecanismo de selección de la tabla.

Para solucionar este problema, debes asegurarte de que el renderizado personalizado no esté bloqueando la selección de la fila. Esto se puede hacer utilizando el método 'setOpaque(true)' en el componente del renderizador personalizado, que permitirá que el color de fondo de la fila se muestre en lugar del renderizado personalizado al seleccionar la fila.

Aquí hay un ejemplo de cómo hacerlo:

class CustomRenderer extends DefaultTableCellRenderer {
   public Component getTableCellRendererComponent(JTable table, Object value,
           boolean isSelected, boolean hasFocus, int row, int column) {
       Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
       c.setOpaque(true); // Permite que la fila sea seleccionable
       // Personaliza el renderizado de la celda aquí
       return c;
   }
}

Con este código, las filas en las que todas las celdas se encuentren renderizadas ahora serán seleccionables al hacer clic en cualquier parte de la fila.


16-Mar-2023 22:25
Invitado (Alejandro Andrade)

Sí, es posible seleccionar una fila completa en la que todas sus celdas se encuentren renderizadas. Lo que debes hacer es habilitar la selección de filas en la tabla utilizando el método 'setRowSelectionAllowed(true)' y luego, cuando renderices las celdas de una fila, debes asegurarte de que el componente que estás utilizando para renderizar las celdas no tenga el foco para que se pueda seleccionar la fila completa al hacer clic en cualquier parte de la misma.

Aquí te dejo un ejemplo de cómo hacerlo:

// Habilitar la selección de filas
table.setRowSelectionAllowed(true);

// Renderizar las celdas de la tabla
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
   @Override
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
       // Obtener el componente que se encargará de renderizar las celdas
       Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

       // Si la celda está renderizada, deshabilitar el foco
       if (/*la celda está renderizada*/) {
           c.setFocusable(false);
       }

       return c;
   }
});

Con este código, todas las filas que tengan todas sus celdas renderizadas podrán ser seleccionadas haciendo clic en cualquier parte de la fila.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)