Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    jtable - ordinare cliccando il titolo della colonna

    Ciao,

    come posso ordinare la tabella, cliccando il titolo sulla colonna?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: jtable - ordinare cliccando il titolo della colonna

    Originariamente inviato da cagnaluia
    come posso ordinare la tabella, cliccando il titolo sulla colonna?
    Dipende .... nel senso che bisogna vedere quale versione di Java e se hai gestito un tuo table model ... tra poco capirai perché.

    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    che bordello....


    per fortuna... mi dò alla versione 6.

  4. #4
    non riesco a capire bene come far funzioare questo tablemodel...

    nel web trovo tanti esempi di tablemodel e jtable costruiti usando array... ma io sono nella situazione di non aver nessun array bensì una tabella su un database.

    Immagino esista un "qualcosa" di automatico che abbia dei metodi di uso comune, per portare questa db_tabella su una jtable.. (per esempio immagino che esista un modello prefatto nel quale collegare le varie colonne, applicare dei filtri... ma anche abilitare o meno dei metodi per creare delle viste/pagine di tot. righe, ordinamenti etc..).
    Pochi click su netbeans e via...

  5. #5
    edit

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.