Dipende .... nel senso che bisogna vedere quale versione di Java e se hai gestito un tuo table model ... tra poco capirai perché.Originariamente inviato da cagnaluia
come posso ordinare la tabella, cliccando il titolo sulla colonna?
Solo a partire da Java 6 in JTable è stato inserito il metodo:
public void setRowSorter(RowSorter<? extends TableModel> sorter)
Usarlo in realtà è abbastanza facile:
tuoJTable.setRowSorter (new TableRowSorter (tuoModel));
e si preoccupa lui di gestire i click sugli header, di presentare la classica freccettina verso l'alto/basso per indicare l'ordine ecc...
Comunque c'è tutta una logica che stabilisce come determinare la comparazione tra due elementi, vedere la documentazione di javax.swing.table.TableRowSorter.
Se non si vuole o non si può usare Java 6, beh, la questione si complica un (bel) po'. Bisogna preoccuparsi di installare un MouseListener sul JTableHeader della JTable, ricevere notifica dei click, stabilire eventualmente con una logica di "toggle" (o magari stabilendo che con SHIFT=discendente) il modo di ordinamento e quindi realizzare l'ordinamento.
Però ci sono una serie di questioni. Innanzitutto l'indice della colonna a video potrebbe non essere affatto l'indice della colonna nel model (se è attiva l'opzione, è possibile trascinare le colonne in altre posizioni), quindi va usato convertColumnIndexToModel() di JTable.
Per quanto riguarda l'ordinamento vero e proprio ... dipende anche qui. Si può andare ad alterare direttamente la struttura del model ordinando le righe (ma bisogna vedere come è fatta la struttura dati).
Oppure si può sfruttare il pattern "decorator": si crea un altro table model (che estende AbstractTableModel) che va messo in "mezzo" tra la JTable e il "vero" table model. Il vero table model non "sa" nulla del fatto di essere ordinato. È il table model in mezzo che quando gli viene richiesta la riga X invece va a prendere e restituisce la riga Y del vero table model, basandosi su una opportuna mappatura delle righe.