DigitalKiller
29-06-2007, 14:19
E' da alcuni giorni che sto provando a risolvere un problema con una jtable senza riuscirci.
Nel programma che sto scrivendo, vado a leggere la tabella UTENTI di un database Mysql. All'interno di questa tabella c'è un campo di tipo VARCHAR il cui contenuto è true o false che mi indica se un utente è abilitato o meno. Quello che voglio fare, è visualizzare i record in una jtable e, per la colonna ABILITATo, visualizzare una checkbox.
Ho creato una classe generica per la gestione (connessione, query, ecc) del database a cui passo una stringa sql (es. SELECT * FROM UTENTI) ottendendo come valore di ritorno un vettore contenente tutti i record selezionati. Questo è una parte del codice della classe Database.java:
while(rs.next()) {
record = new Vector();
for (int i = 0; i < colonne; i++) {
record.add(rs.getString(i + 1));
}
v.add(record.clone());
}
Il vettore ritornato, lo passo al costruttore della classe TabellaSolaLettura che estende DefaultTableModel. Questa è la classe TabellaSolaLettura.java:
public TabellaSolaLettura(Vector tabellaDati, Vector tabellaNomColonne) {
super(tabellaDati, tabellaNomColonne);
}
public boolean isCellEditable(int riga, int colonna) {
return false;
}
public Class getColumnClass(int colonna) {
return getValueAt(0, colonna).getClass();
}
In questo modo, i record letti dal database vengono visualizzati correttamente ma per la colonna ABILITATO vengono visualizzati i valori letti, cioè true o false. Il problema è che tutti i record sono letti come stringhe e quindi il metodo getColumnClass(int colonna) mi restituisce sempre String. Ho modificato il metodo in questo modo:
public Class getColumnClass(int colonna) {
switch (colonna) {
case 7:
return Boolean.class;
default:
return getValueAt(0, colonna).getClass();
}
}
ma ottengo questa eccezione java.lang.String cannot be cast to java.lang.Boolean.
Come posso risolvere?:help:
Nel programma che sto scrivendo, vado a leggere la tabella UTENTI di un database Mysql. All'interno di questa tabella c'è un campo di tipo VARCHAR il cui contenuto è true o false che mi indica se un utente è abilitato o meno. Quello che voglio fare, è visualizzare i record in una jtable e, per la colonna ABILITATo, visualizzare una checkbox.
Ho creato una classe generica per la gestione (connessione, query, ecc) del database a cui passo una stringa sql (es. SELECT * FROM UTENTI) ottendendo come valore di ritorno un vettore contenente tutti i record selezionati. Questo è una parte del codice della classe Database.java:
while(rs.next()) {
record = new Vector();
for (int i = 0; i < colonne; i++) {
record.add(rs.getString(i + 1));
}
v.add(record.clone());
}
Il vettore ritornato, lo passo al costruttore della classe TabellaSolaLettura che estende DefaultTableModel. Questa è la classe TabellaSolaLettura.java:
public TabellaSolaLettura(Vector tabellaDati, Vector tabellaNomColonne) {
super(tabellaDati, tabellaNomColonne);
}
public boolean isCellEditable(int riga, int colonna) {
return false;
}
public Class getColumnClass(int colonna) {
return getValueAt(0, colonna).getClass();
}
In questo modo, i record letti dal database vengono visualizzati correttamente ma per la colonna ABILITATO vengono visualizzati i valori letti, cioè true o false. Il problema è che tutti i record sono letti come stringhe e quindi il metodo getColumnClass(int colonna) mi restituisce sempre String. Ho modificato il metodo in questo modo:
public Class getColumnClass(int colonna) {
switch (colonna) {
case 7:
return Boolean.class;
default:
return getValueAt(0, colonna).getClass();
}
}
ma ottengo questa eccezione java.lang.String cannot be cast to java.lang.Boolean.
Come posso risolvere?:help: