Newsgroup: it.comp.java
Titolo: SWING

Salve qualcuno di voi ha esperienza sull'uso del componente Jtable che
fa parte delle Swing ?
Io sto cominciando ad avvicinarmi a questo oggetto ma non trovo
documentazione esauriente.
Sapete dove trovarne ??
Saluti Roberto
Mandatemi Mail direttamente....

Sapete dove trovarne ??
Io l'ho usata per il lavoro di tesi che sto svolgendo e devo dire che... mi
sono dovuto leggere attentamente tutta la documentazione javadoc disponibile
(non molto esauriente) della SUN e ho fatto un bel po' di prove e
controprove...
Attualmente sto utilizzando la JTable delle SWING 0.7, che è stata
sensibilmente cambiata rispetto alle SWING 0.5
Come posso aiutarti?

Sapete dove trovarne ??
Scusa la conclusione idiota del mio msg precedente... quando l'ho scritto
ero stanco e non avevo voglia di spiegare niente...
Dunque, io mi riferisco alla JTable delle SWING 0.7
Credo che nelle nuove SWING non abbiano cambiato tutto di nuovo e i discorsi
che seguono dovrebbero essere ancora validi. Per quanto riguarda la
documentazione, penso che data la "giovinezza" delle SWING, oltre alle
JavaDoc della SUN non puoi andare oltre, a meno di non scrivere direttamente
e-mail alla stessa.
Io ho trovato la JTable un oggetto piuttosto complesso e con qualche
meccanismo apparentemente un po' ridondante... Inoltre la JTable è legata a
molti altri oggetti (usati per "delegation") e interfaccie non sempre
documentati (javadoc).
La JTable non è altro che il solo oggetto grafico che visualizza dati in
forma tabellare. Per utilizzarla è necessario utilizzare un oggetto
ausiliario, chiamiamolo "TableModel", che è invece la "fonte" dei dati da
visualizzare.
"TableModel" è in effetti il nome dell'interfaccia che tale "struttura dati"
deve implementare, cioè i metodi che la JTable usa per conoscere le
dimensioni della tavola ( getRowCount(), getColumnCount() ) e per prendere i
dati da visualizzare in ogni cella ( getValueAt() ).
Generalmente non è necessario implementare una TableModel personalizzata
poichè ne è disponibile una adatta per uso generico, ovvero la
DefaultTableModel. Questa viene istanziata al momento della creazione della
JTable tramite un opportuno costruttore (vedi javadoc).
DefaultTableModel implementa la struttura dati della tavola come vettore di
vettori "equidimensionali". Questi ultimi contengono i valori delle singole
celle, riga per riga (o colonna per colonna? non mi ricordo, ma poco
importa). I valori
sono presi come oggetti "Object". Ricordati però che prima di usare una
DefaultTableModel, se ricordo bene, devi fare in modo che
E' da notare comunque la possibilità offerta dall'interfaccia TableModel a
cui fa riferimento la JTable. E' possibile creare TableModel personalizzati
ed ottimizzati per casi specifici, "confezionando" una pura struttura dati,
anche preesistente, con i metodi dell'interfaccia TableModel. (Ad es., io ho
avuto la necessità di utilizzare una JTable per visualizzare grandi matrici,
piuttosto incomplete, con valori sparsi qua e là.  La DerfaultTableModel non
è proprio l'ideale per una situazione del genere, quindi ho dovuto scrivere
un TableModel ad-hoc che memorizzasse i soli valori di incrocio non nulli.
Inoltre ho utilizzato un thread per il caricamento dati da DB...)
Attenzione: la JTable e il TableModel utilizzano sistemi di indicizzazione
(coordinate, riferimenti a celle, chiamali come vuoi) DIVERSI e
INDIPENDENTI.
La JTable, SWING 0.7, ora fa riferimento alle celle solamente tramite le
coordinate (riga, colonna), così come il TableModel. Quando sposti una
colonna della JTable trascinandola con il mouse, cambiano solo i riferimenti
della JTable ma non quelli del Model.
E' possibile creare anche JTable EDITABILI, che diano la possibilità di
modificare i valori. In tal caso il TableModel deve offrire il codice
opportuno ( metodo setValueAt(r, c) e forse altri... ) ma in questo caso non
mi sono ancora addentrato molto e non so dirti tanto.
Ci sarebbero tante altre cose da dire sulla JTable e tutti gli oggetti
correlati, ma non creado sia il caso di parlarne subito... non finirei
più... inoltre non conosco tutto nemmeno io!
Fammi sapere...
Fabrizio.