2013-03-21 19 views
5

Ho una tabella con più righe e ogni riga viene presentata tramite Punto su un grafico a dispersione. Quello che devo fare è quando un determinato punto è selezionato sul grafico a dispersione. Devo associare questa selezione con la selezione della riga corrispondente nella JTable.Java Swing JTable seleziona programmaticamente più righe

Ho un numero intero che rappresenta, quale riga devo evidenziare.

Quello che ho cercato è:

JTable table = new JTable(); 
... 
...// a bit of code where I have populated the table 
... 
    table.setRowSelectionInterval(index1,index2); 

Così il problema qui è che questo metodo seleziona tutte le righe della gamma data [index1, Indice2]. Voglio selezionare per esempio righe 1,15,28,188 ecc.

Come si fa?

Grazie, Anton

risposta

11

Per selezionare solo una riga, passano come sia l'inizio e la fine di indice:

table.setRowSelectionInterval(18, 18); 

Oppure, se si desidera selezionare più, indici non contigue:

ListSelectionModel model = table.getSelectionModel(); 
model.clearSelection(); 
model.addSelectionInterval(1, 1); 
model.addSelectionInterval(18, 18); 
model.addSelectionInterval(23, 23); 

in alternativa, è possibile che l'implementazione del proprio sottoclasse di ListSelectionModel e di utilizzarlo per monitorare la selezione sia sul tavolo e la sca tterplot è una soluzione più pulita, piuttosto che ascoltare sul grafico a dispersione e forzare il tavolo a corrispondere.

+0

Ah questo è ciò che ho appena provato e sembra che funziona bene per me:) Grazie per la risposta! –

1

Non v'è alcun modo per impostare una selezione casuale con una chiamata un metodo, è necessario più di uno per eseguire questo tipo di selezione

table.setRowSelectionInterval(1, 1); 
table.addRowSelectionInterval(15, 15); 
table.setRowSelectionInterval(28, 28); 
table.addRowSelectionInterval(188 , 188); 

e così via ....

+0

@ Jäbir dopo questa sarà selezionata l'ultima riga. devi usare 'ListSelectionModel' come indicato in [post sopra] (http://stackoverflow.com/a/15556376/1196670) – 1ac0

3

E anche funziona senza utilizzare il ListSelectionModel:

table.clearSelection(); 
table.addRowSelectionInterval(1, 1); 
table.addRowSelectionInterval(15, 15); 
table.addRowSelectionInterval(28, 28); 
... 

Proprio non chiamare il setRowSelectionInterval, come si cancella sempre la selezione corrente prima.

0

Ecco un metodo generico per ottenere questo risultato:

public static void setSelectedRows(JTable table, int[] rows) 
{ 
    ListSelectionModel model = table.getSelectionModel(); 
    model.clearSelection(); 

    for (int row : rows) 
    { 
     model.addSelectionInterval(row, row); 
    } 
}