Ciao, premetto che sono neofita di java.
Ho creato una matrice di double MxN che vorrei visualizzare in una jtable. Per creare il model ho bisogno di convertire l'array[][] double della matrice in Object[][].
Come faccio a fare la conversione?
grazie
Cait Sith
08-07-2013, 11:02
No, la conversione la fai direttamente nel metodo getValueAt.
Per esempio se l'array è di double in quella funzione fai:
public Object getValueAt(int row, int col) {
return new Double(array[row][col]);
}
così lui quando deve visualizzare un elemento chiama quella funzione
Ovviamente nel model, come campo, devi avere l'array.
Jabberwock
08-07-2013, 18:47
Ho un problema simile anche io, ma non devo usare gli array!
In poche parole, devo popolare una tabella di 4 colonne con i risultati di una query verso un database!
Supponiamo che la query restituisca 3 righe (ma potrebbero essere 0, come 50) da 4 colonne ([1,2,3,4],[5,6,7,8],[9,10,11,12]), l'intenzione e' sfruttare il costruttore JTable(Vector rowData, Vector columnNames), rowData che e' un vettore di vettori (poi ho intenzione di sostituire Vector con ArrayList, ma al momento mi interessa l'implementazione)... e il problema e' questo: il vettore che mi viene fuori non e'
[1,2,3,4]
[5,6,7,8]
[9,10,11,12]
ma
[1,2,3,4,5,6,7,8,9,10,11,12]
[1,2,3,4,5,6,7,8,9,10,11,12]
[1,2,3,4,5,6,7,8,9,10,11,12]
quindi nella tabella vedo si 3 righe, ma sempre con 1,2,3,4
Il codice che ho usato per generare i vettori e':
while (rs.next()) {
elementi.add(rs.getString("1"));
elementi.add(rs.getString("2"));
elementi.add(rs.getString("3"));
elementi.add(rs.getString("4"));
dati.add(elementi);
}
E, in effetti, il comportamento mi pare corretto: aggiungo [1,2,3,4,] al vettore elementi e lo aggiungo al vettore dati, ma quando aggiungo [5,6,7,8] ad elementi con la seconda iterazione, questi elementi vanno in coda ad elementi, quindi, quando aggiungo a dati, mi ritrovo il primo inserimento modificato (ho modificato elementi) e un ulteriore riga identica; alla terza iterazione, essendo stati aggiunti [9,10,11,12] in coda ad elementi, il primo elemento del vettore dati e' cambiato, idem il secondo e viene aggiunto un terzo uguale ai primi due...
Ragionandoci, mi e' venuto in mente che ad ogni iterazione dovrei usare un vettore di tipo diverso (es. elementi1, elementi2, elementi3, ...), ma non riesco a pensare ad un modo per farlo, non sapendo a priori quanti saranno i risultati della query...
wingman87
08-07-2013, 20:22
Basta che come prima istruzione del corpo del while instanzi un nuovo contenitore:
elementi = new Vector();
All'incirca, perché non so di che tipo è esattamente elementi...
Jabberwock
08-07-2013, 20:28
Basta che come prima istruzione del corpo del while instanzi un nuovo contenitore:
elementi = new Vector();
All'incirca, perché non so di che tipo è esattamente elementi...
Doh, non ci avevo pensato! :muro:
No, la conversione la fai direttamente nel metodo getValueAt.
Per esempio se l'array è di double in quella funzione fai:
public Object getValueAt(int row, int col) {
return new Double(array[row][col]);
}
così lui quando deve visualizzare un elemento chiama quella funzione
Ovviamente nel model, come campo, devi avere l'array.
Ho risolto proprio così, grazie mille!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.