2011-12-28 20 views
43

Cuando se inicia la aplicación, no se selecciona ninguna de las filas. Pero me gustaría mostrar que la primera fila ya está seleccionada.Seleccionar mediante programación una fila en JTable

¿Cómo hacer esto? ¿Debo configurar 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) 

Respuesta

81

usted puede hacerlo llamando setRowSelectionInterval:

table.setRowSelectionInterval(0, 0); 

para seleccionar la primera fila.

+0

Revise las actualizaciones en mi publicación. Publiqué un mensaje de error. ¿Qué podría estar mal? –

+1

Índice de filas fuera de límite, tal vez la tabla esté vacía ... – aleroot

+0

Mi código es el siguiente: QueryTableModel tableModel = new QueryTableModel(); JTable table = new JTable (tableModel); table.setRowSelectionInterval (0, 0); –

6

Se utiliza el available API de JTable y no tratar de meterse con los colores.

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

+0

Intenté table.setRowSelectionInterval (1,1), pero dice que el "Índice de fila fuera de rango", aunque la tabla ya estaba llena de DB. ¿Algunas ideas? –

+1

Como casi todo en Java, la numeración comienza en la fila 0 y no en la fila 1. Cambie a 'setRowSelectionInterval (0,0)' – Robin

9

Es un antiguo puesto, pero me encontré con este recientemente

Selección de un intervalo específico

Como ya se ha mencionado @aleroot, mediante el uso de

table.setRowSelectionInterval(index0, index1); 

Puede especificar un intervalo , que debe ser seleccionado.

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

También puede guardar la selección actual, y simplemente añadir filas adicionales utilizando esta aquí

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

Esta línea de código selecciona adicionalmente el intervalo especificado . No importa si ese intervalo ya está seleccionado, se seleccionan partes de él.

+1

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

Cuestiones relacionadas