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

    JTable : ordinamento colonna in base alla data

    Salve raga

    ho necessità di ordinare la colonna di una tabella che contiene diverse date...

    Il problema è che queste vengono riconosciute come stringhe e quindi l'ordinamento non è esatto...

    Sarei riuscito ad ovviare al problema lavorando sul TableModel facendo in modo che la colonna ritornasse Date.class, il problema è che queste celle sono editabili ed in questo modo non riesco ad inserire un qualsiasi input ( un classico formato data " 01/01/2013 " non viene riconosciuto )

    Qualche suggerimento per risolvere il problema o alternative?

    Thanks

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

    Re: JTable : ordinamento colonna in base alla data

    Originariamente inviato da Fire Fox II
    ho necessità di ordinare la colonna di una tabella che contiene diverse date...

    Il problema è che queste vengono riconosciute come stringhe e quindi l'ordinamento non è esatto...

    Sarei riuscito ad ovviare al problema lavorando sul TableModel facendo in modo che la colonna ritornasse Date.class, il problema è che queste celle sono editabili ed in questo modo non riesco ad inserire un qualsiasi input ( un classico formato data " 01/01/2013 " non viene riconosciuto )
    Guarda, parto col spiegare cosa succede quando il table model restituisce Date.class per una colonna, senza aver predisposto altro di specifico.

    Che io sappia (perché ho guardato il sorgente di JTable del JDK7), esiste un renderer di default per Date.class. Questo formatta usando banalmente DateFormat.getDateInstance(), quindi per il locale italiano ad esempio "18-ago-2013".

    Se la cella è editabile e passi in edit, entra il gioco l'editor. Sfortunatamente in JTable non esiste un editor di "default" specifico per Date.class, JTable cerca un editor risalendo la gerarchia (solo le super-classi) di Date. Date estende direttamente Object ed esiste in JTable un editor per Object.class. Questo è un editor molto generico e quando confermi l'edit, questo editor si aspetta di trovare nel tipo X della cella un costruttore che riceve un String e che dovrebbe parsare quindi l'input per costruire un oggetto X.

    Date effettivamente ha un costruttore con String (a parte che è deprecato) ma in ogni caso si aspetta una stringa con un formato ben preciso (vedere javadoc).

    Soluzioni?

    a) Implementi un tuo TableCellEditor per Date.class (e anche un renderer se non ti piace es. "18-ago-2013").

    b) Definisci una tua classe es. MyDate (che può contenere Date o Calendar o altro che preferisci per il date/time). Non hai bisogno di implementare renderer/editor perché basta che il tuo MyDate abbia: 1) un costruttore che riceve String che sappia parsare la data come vuoi tu (in caso di input errato puoi lanciare es. IllegalArgumentException o meglio ParseException, l'editor di Object in effetti usa la reflection e cattura qualunque nefandezza di eccezione da Exception in giù) e 2) un toString() che fornisca la data in stringa come vuoi tu.

    Per quanto riguarda l'ordinamento di una colonna, in passato è sempre stato abbastanza complicato. Solo da Java 6 è stato introdotto il javax.swing.RowSorter (e sotto-classi).
    Non ho quasi mai usato questa funzionalità, quindi leggi: Sorting and Filtering
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sempre prezioso... Risolto... Grazie per i suggerimenti

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.