Seleccione programáticamente una fila en JTable

4 minutos de lectura

avatar de usuario
Klausos Klausos

Cuando se inicia la aplicación, ninguna de las filas está seleccionada. Pero me gustaría mostrar que la primera fila ya está seleccionada.

¿Como hacer esto? ¿Necesito establecer el color de una fila en JTable?

Actualización: probé table.setRowSelectionInterval(0,0). Sé que debería funcionar, pero hay un mensaje de error:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Row index out of range
    at javax.swing.JTable.boundRow(Unknown Source)
    at javax.swing.JTable.setRowSelectionInterval(Unknown Source)
    at cpn_gui.OptPanel.createForm(OptPanel.java:124)
    at cpn_gui.OptPanel.<init>(OptPanel.java:50)
    at cpn_gui.Login$1.actionPerformed(Login.java:62)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

avatar de usuario
Aleroot

Puedes hacerlo llamando setRowSelectionInterval :

table.setRowSelectionInterval(0, 0);

para seleccionar la primera fila.

  • Por favor revise las actualizaciones en mi publicación. Publiqué un mensaje de error. ¿Qué podría estar mal?

    – Klausos Klausos

    28 de diciembre de 2011 a las 21:26

  • Mi código tiene el siguiente aspecto: QueryTableModel tableModel = new QueryTableModel(); tabla JTable = new JTable(tableModel); tabla.setRowSelectionInterval(0, 0);

    – Klausos Klausos

    28 de diciembre de 2011 a las 21:41


  • Antes de llamar a table.setRowSelectionInterval(0, 0), debe asegurarse de que al menos una fila esté presente en la tabla; de lo contrario, obtendrá este error. Llame a table.setRowSelectionInterval(0, 0) después de llenar la tabla…

    – aleroot

    28 de diciembre de 2011 a las 21:43

Es una publicación antigua, pero me encontré con esto recientemente.

Selección de un intervalo específico

Como @aleroot ya mencionó, al usar

table.setRowSelectionInterval(index0, index1);

Puede especificar un intervalo, que debe seleccionarse.

Adición de un intervalo a la selección existente

También puede mantener la selección actual y simplemente agregar filas adicionales usando esto aquí

table.getSelectionModel().addSelectionInterval(index0, index1);

Esta línea de código selecciona además el intervalo especificado. No importa si ese intervalo ya está seleccionado, partes de él están seleccionadas.

  • Esta es una respuesta más general, que cubre la selección de filas tanto consecutivas como no consecutivas. Funcionó para mí.

    – Kamal Singh

    1 de abril de 2016 a las 7:00

usas el API disponible de JTable y no trates de jugar con los colores.

Algunos métodos de selección están disponibles directamente en la JTable (como el setRowSelectionInterval). Si desea tener acceso a toda la lógica relacionada con la selección, el modelo de selección es el lugar para empezar a buscar

  • Intenté table.setRowSelectionInterval (1,1), pero dice que el “índice de fila está fuera de rango”, aunque la tabla ya estaba poblada desde DB. ¿Algunas ideas?

    – Klausos Klausos

    28 de diciembre de 2011 a las 21:07


  • Como casi todo en Java, la numeración comienza desde la fila 0 y no desde la fila 1. Así que cámbielo a setRowSelectionInterval(0,0)

    – Robin

    28 de diciembre de 2011 a las 21:09

¿Ha sido útil esta solución?