Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    formato date e Jtable Sort

    ciao amicici,
    non riesco a capire come si comporti una jtable con il sort su una colonna di tipo DATA.

    estraggo il valore da un DB Oracle lo passo alla jtable e il sort funziona correttamente ma con il formato data americano YYYY-MM-DD HH24:MI:SS

    io ho la necessita di visualizzare in tabella la data nel formato italiano DD-MM-YYYY HH24:MI:SS

    ma se formatto con SimpleDateFormat ottengo una stringa formattata in maniera corretta ma passandola alla jtable non funziona piú il sort!?!?!?!?

    Grazie

    ....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
    -- Chi si accontenta non gode si illude --

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

    Re: formato date e Jtable Sort

    Originariamente inviato da hannibal/p
    non riesco a capire come si comporti una jtable con il sort su una colonna di tipo DATA.

    estraggo il valore da un DB Oracle lo passo alla jtable e il sort funziona correttamente ma con il formato data americano YYYY-MM-DD HH24:MI:SS

    io ho la necessita di visualizzare in tabella la data nel formato italiano DD-MM-YYYY HH24:MI:SS

    ma se formatto con SimpleDateFormat ottengo una stringa formattata in maniera corretta ma passandola alla jtable non funziona piú il sort!?!?!?!?
    Se nella cella (ovvero ciò che ritorna il getValueAt) c'è effettivamente un java.util.Date, allora il renderer "predefinito" di JTable visualizza banalmente il risultato del toString() di Date (che, ricordo sempre, è un formato fisso in inglese) ma il row sorter in questo caso funziona nel modo come ci si aspetta perché Date è Comparable e il row sorter è in grado di usarlo.

    Se formatti la data e nella cella ci metti un String .... chiaramente il row sorter lo tratta pedestremente come "stringa" e quindi compara stringhe (il che non è appropriato).

    Definisci un tuo cell renderer per ricevere il java.util.Date e formattarlo come ti pare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    piccolo aiutino per il cell render???

    Grazie

    Ciao
    ....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
    -- Chi si accontenta non gode si illude --

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hannibal/p
    piccolo aiutino per il cell render???

    Grazie
    La versione più semplice:

    codice:
    class MyDateTableCellRenderer extends DefaultTableCellRenderer {
        protected void setValue(Object value) {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
            super.setValue(sdf.format((Date) value));
        }
    }
    L'unica questione è la "registrazione". Se il table model "espone" il tipo della colonna (da getColumnClass) come java.util.Date, puoi registrarlo "per la classe".

    tabella.setDefaultRenderer(Date.class, new MyDateTableCellRenderer());

    Se vuoi solo per una colonna specifica o se stai usando DefaultTableModel (che espone tutto come java.lang.Object), devi registrarlo "per la colonna".

    tabella.getColumnModel().getColumn(....indice....) .setCellRenderer(new MyDateTableCellRenderer());
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ottimo!!!

    Grazie

    in rete non sono riuscito a trovare nulla......

    lo provo subito

    Ciao
    ....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
    -- Chi si accontenta non gode si illude --

  6. #6
    java.lang.String cannot be cast to java.util.Date

    ....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
    -- Chi si accontenta non gode si illude --

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hannibal/p
    java.lang.String cannot be cast to java.util.Date
    Nella cella del model hai un String ... devi avere un java.util.Date. Altrimenti tutto quanto detto non vale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    il valore che va alla jtable é creato in questa maniera

    codice:
            
    
             Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
             ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
             v = new Vector();
             ResultSetMetaData rsmd = rs.getMetaData();
             colonne = rsmd.getColumnCount();
    
             while(rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
                record = new String[colonne];
                for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
                v.add( (String[]) record.clone() );
             }
    che contiene tutte le colonne comprese le strinche gli interi le date ecc...
    ....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
    -- Chi si accontenta non gode si illude --

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hannibal/p
    codice:
    for (int i=0; i<colonne; i++) record[i ] = rs.getString(i+1);
                v.add( (String[]) record.clone() );
    Prendi le colonne come String (cioè chiedi a JDBC di fare lui la conversione in String). Chiaramente non va bene per quanto ho detto.

    Se il codice fosse specifico per una certa tabella "nota", allora sapresti tu quali colonne prendere come int (getInt), String (getString) o altro.

    Da quel tuo codice ho la nettissima impressione che sia "generico", cioè per una qualunque query, senza sapere cosa/come sia a priori. In questo caso la cosa migliore che puoi fare è usare getObject. Se il campo è un CHAR/VARCHAR avrai String, se è un DATE avrai un java.sql.Date (che è-un java.util.Date) ecc....
    Insomma ... l'oggetto quello che è ... secondo la mappatura di JDBC.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    * query SQL con to_char(campo, 'formato')

    * funzione con .getObject

    * render scritto da te

    mi da lo stesso errore....
    dove sbaglio?
    come faccio a capire il tipo di dato che arriva dalla select?
    ....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
    -- Chi si accontenta non gode si illude --

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.