sono un principiante e vorrei sapere se il mio approccio è corretto.
Per popolare una JTable faccio questo:
- connessione al database;
- passo il resultset ad un vettore;
- costruisco la TablelModel con il vettore;
- attribuisco la TablelModel alla JTable.
Il problema nasce quando voglio correttamente visualizzare i dati, mi
spiego meglio:
nel database MySql ho una colonna bit per gestire un valore boolean
- se uso row.add(rs.getBoolean(i));
vedo correttamente nella Jtable il checkbox
- se uso row.add(rs.getString(i));
vedo true o false
Lo stesso concetto non funziona con row.add(rs.getDate(i)); e con
row.add(rs.getFloat(i));
in alcuni siti viene suggerito di leggere tutto com getString(i) ma
poi come faccio a specificare che in quella colonna mi deve mostrare
il checkbox ???
Qual'è il giusto approccio, leggere il valore in base al tupo o
trattare tutti i valori come stringhe per poi fare la conversione?
Grazie
Sei stato chiarissimo, ho capito molto di più da te che dalle mille
pagine che ho letto. Mi studio bene questo Class<?> !!!
Ma dimmi, approfitto della tua gentilezza, dal resultset conviene
leggere i valori come stringa ?
Grazie
Biagio
void addTableCell(Number cell, int columnindex)..
void addTableCell(String cell, int columnindex)..
void addTableCell(Boolean cell, int columnindex)..
etc. etc.
L'utilizzo di resultset.getString(columnindex) non sempre sortisce un
effetto praticabile, ad esempio potresti trovarti la rappresentazione di
un numero in notazione scientifica, ad esempio 0.1234 +3 invece di 123,4
come forse lo si vorrebbe rappresentare.
Grazie ai tuoi suggerimenti ho fatto notevoli progressi.
Ho implementato una classe che estende la TableCellRender ed una che
estende la DefaultTableCellRenderer.
Leggo i valori con resultset.getObject(columnindex).
Ora nella mia JTable vedo correttamente il checkbox per i valori true
e false, i numeri allineati a destra e le date nel formato "dd mmm
yyyy". I record vengono mostrati alternando il colore nero e blu per
una lettura facilitata.
Devo solo sistemate i numeri nella rappresentazione ###.###,## e le
date in dd/mm/yyyy. Queste non sono urgenti.
Provengo dal linguaggio CA-Visual Object. Con Java mi trovo benissimo,
ma chiaramente essendo all'inizio mi sembra di avere una montagna
altissima davanti.
Uso NetBeans ma non voglio creare troppo codice automatico perché alla
fine non so più dove mettere le mani per fare le modifiche.
Per questo ho creato una classe generale per gestire dei valori
tabellari, con tutti i metodi necessari al suo funzionamento. In
questo modo posso avere una decina di JDialog diverse che ereditano la
classe generale e con pochissimo codice:
- nome della tabella del database
- nomi dei campi
gestire una serie di tabelle diverse tra loro.
Grazie ancora
Biagio
Visto che la montagna e' effettivamente alta, proviamo a darle una limatina.
Per le date ti consiglio qualcosa del genere:
static SimpleDateFormat ddmmyyy = new SimpleDateFormat("dd/MM/yyyy");
poi lo usi cosi':
Date data = ddmmyyyy.parse("17/12/2009");
e viceversa:
String dataConSeparatoriSbagliati = ddmmyyyy.format(new Date());
analogamente puoi utilizzare DecimalFormat, istanziandolo sia
direttamente che utilizzando il suo factory dipendente dalla locale che
indichi. Stando al tuo esempio:
static DecimalFormat fixed2 =
new DecimalFormat("###.##0,0#;-###.##0,0#");
Cosi' pero' non funzionerebbe, in quanto i seperatori decimale e di
ragguppamento cifre non sono quelli americani, pero'puoi creare un
oggetto ad-hoc in questo modo:
static DecimalFormat fixed2 =
new DecimalFormat("###.##0,0#;-###.##0,0#",
new DecimalFormatSymbols(Locale.ITALIAN));
quindi il pattern e' piu' o meno quello che ti aspettavi, ho aggiunto
gli zeri ad indicare il numero minimo di cifre, la seconda parte
separata dal punto e virgola, serve ad indicare la formattazione dei
numeri negativi ed e' opzionale.
Il pattern puo' essere omesso, visto che Decimal format ha metodi
espliciti per indicare le cifre il segno e gli altri aspetti inerenti la
formattazione dei numeri.
L'uso e' analogo:
Number numero = fixed2.parse("1.234,01");
e viceversa:
String numero = fixed2.format(1234.01D);
Caspita, è un piacere leggerti !!!
Mi dispiace non poter ricambiare, difficilmente in Java potrei
competere.
Non sono un programmatore professionista, ma solo un appassionato di
informatica.
Faccio il commercialista, se hai quesiti in materia fiscale fammelo
sapere :-)))
Corro a provare i suggerimenti per le date e numeri.
Ancora grazie
Biagio
Bene, abbiamo una formazione comune. Anche per me è una passione che
in alcuni casi mi semplifica la vita in ufficio.
Devo raggiungere un livello accettabile nella programmazione java,
così il confronto potrà essere costruttivo anche per te.
A presto (perché di sicuro mi servirà capire altro ....)