2011-12-28 20 views
43

All'avvio dell'applicazione, nessuna delle righe è selezionata. Ma vorrei mostrare che la prima riga è già selezionata.Seleziona una riga in JTable

Come fare questo? Devo impostare il colore di una riga in JTable?

Aggiornamento: Ho provato table.setRowSelectionInterval (0,0). So che dovrebbe funzionare, ma c'è un messaggio di errore:

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) 

risposta

81

si può fare chiamando setRowSelectionInterval:

table.setRowSelectionInterval(0, 0); 

per selezionare la prima fila.

+0

Controllare gli aggiornamenti nel mio post. Ho postato un messaggio di errore. Cosa potrebbe esserci di sbagliato? –

+1

Indice riga fuori limite, forse la tabella è vuota ... – aleroot

+0

Il mio codice ha il seguente aspetto: QueryTableModel tableModel = new QueryTableModel(); Tabella JTable = new JTable (tableModel); table.setRowSelectionInterval (0, 0); –

6

Si utilizza la available API di JTable e non provare a pasticciare con i colori.

Alcuni metodi di selezione sono disponibili direttamente su JTable (come setRowSelectionInterval). Se si desidera avere accesso a tutti logica di selezione legati, il selection model è il luogo per iniziare la ricerca

+0

Ho provato table.setRowSelectionInterval (1,1), ma dice che "L'indice di riga non è compreso nell'intervallo", sebbene la tabella sia già stata compilata dal DB. Qualche idea? –

+1

Come quasi tutto in Java, la numerazione inizia dalla riga 0 e non dalla riga 1. Quindi cambiatela in 'setRowSelectionInterval (0,0)' – Robin

9

Si tratta di un vecchio post, ma mi sono imbattuto in questo recente

Selezione di un intervallo di specifica

Come @aleroot già accennato, utilizzando

table.setRowSelectionInterval(index0, index1); 

È possibile specificare un intervallo , che dovrebbe essere selezionato.

di un intervallo alla selezione esistente

È anche possibile mantenere la selezione corrente, e semplicemente aggiungere righe aggiuntive utilizzando questo qui

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

Questa riga di codice seleziona inoltre l'intervallo specificato . Non importa se quell'intervallo è già selezionato, di parti di esso sono selezionate.

+1

Questa è una risposta più generale, che copre sia la selezione di righe consecutive che non consecutive. Ha funzionato per me. –

Problemi correlati