Newsgroup: it.comp.java
Titolo: Rappresentazione di dati ...

Vorrei usare il componente JTable (Swing) per una rappresentazione tabellare
di una tabella di un database.
In che modo(codice) si puň fare in maniera veloce e pratica?
Grazie

OK sei pronto ? calcola che quello che sto per dirti è così difficile che
potresti impazzire e lasciare per sempre il mondo della programmazione.
Scherzo è una baggianata, basta capire un paio di concetti.
Molti oggetti Swing non memorizzano le loro informazioni dentro l'oggetto
stesso, ma delegano questo compito ad un Model.
Questo perché definendo più model è possibile dare caratteristiche diverse
allo stesso oggetto.
Questa caratteristica è ben visibile con oggetti complessi come le JTree e
le JTable.
Nel tuo caso la JTable reperisce i suoi dati da un model che implementa
l'interfaccia TableModel o che estende la classe Astratta AbstractTableModel
(il risultato è lo stesso).
Io ti faccio l'esempio della classe AbstractTableModel.
Crei una classe che sarà il tuo Model e che estenderà la classe
AbstracTableModel.
nel tuo model devi obbligatoriamente implementare 3 metodi che servono alla
JTable per capire quanti elementi ci sono, di quante colonne sono composti e
come reperirli.
Questi metodi sono appunto :
                - public int getRowCount();
                - public int getColumnCount();
                - public Object getValueAt(int row, int column);
Dentro il tuo model istanzi una struttura dati che ti permette di
memorizzare e gestire i tuoi dati, per esempio un Vector o un ArrayList o un
HashTable, quello che vuoi.
Già implementando questi tre metodi la JTable sarà in grado di leggere e
visualizzare i dati contenuti della struttura dati che scegli più opportuna.
Nel tuo caso specifico, riempirai tale struttura con i dati provenienti dal
resultSet del tuo DB.
Dopo di che basta fare istanzaJTable.setModel(tableModel ==> tuo model)
e tutto funzionerà per magia.
Ricordati che se modifichi, aggiungi, togli elementi dalla struttura dati
del model, per far si che questa sia visibile anche sulla JTable devi usare
uno dei metodi fireXXXX(xxx,xxxx) della classe AbstravtTableModel, che
appunto aggiornano le informazioni della JTable.
Da quì puoi sbizarrirti quanto ti pare.
Sappi che se non ti va di perdere tempo puoi anche usare il model di default
che Java mette a disposizione che è la classe DefaultTableModel, ma che ti
obbliga ad avere tante colonne nella JTable quante sono le colonne di cui
sono composti i record del DB.
Se preferisci la strada del model personalizzato, dovrai vederti anche
qualche altra interfaccia necessaria per definire il tipo di editor della
cella o il tipo di cella.
In sostanza queste interfaccie tiu permettono per ogni colonna di
specificare se le celle sono delle JTextField o delle JComboBox se sono
editabili o no e come se non bastasse ti permettono di scegliere se la cella
visualizzerà immagini o sarà un componente testo.
Puoi fare quello che vuoi insomma.
Good Luck.



Hai guarda nel primo (ovvio) posto?
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
HTH
-- 
Ciao
	Fabrizio C.

 wrote in message
9r3pe2$1trm$1...@stargate1.inet.it...

GRAZIE MILLE...ora mi è tutto più chiaro.
Lascerò la programmazione !!!!!!!!!
ah ah ah

Mi hai detto...
"...Dentro il tuo model istanzi una struttura dati che ti permette di
memorizzare e gestire i tuoi dati, per esempio un Vector o un ArrayList o un
HashTable, quello che vuoi ..."
Mi potresti mandare un esempio?
Grazie ancora.

> Mi potresti mandare un esempio?
Certo che posso ma voglio 100.000 Euro
Hmmmm, per questa volta sono generoso giusto perché hai promesso che
lascerai la programmazione.
Definire un model è abbastanza semplice.
Per esempio :
public class MyTableModel extends AbstractTableModel
{
    // La prima cosa da fare è dichiarare le strutture
    // dati nelle quali andrai a memorizzare :
    //     -- i tuoi dati                 (dataModel)
    //     -- i nomi delle colonne (columnName)
    private Vector dataModel = new Vector();
    private Vector columnName = new Vector();
    // ora ci occorrono almeno due variabili che memorizzano
    // il numero delle colonne e il numero delle righe della
    // struttura dati.
    private int columnCount = 0;
    private int rowCount     = 0;
}
Questa è l'idea di base.
Personalmente memorizzo le righe dentro un'array di stringhe che poi passo
al vettore dataModel.
Questo perché, perché............., boh, mi rimane più comodo.
Per rintracciare un valore x,y, estraggo l'array dal Vettore alla posizione
y e poi dall'array prendo l'elemento x.
Se strutturi bene il tutto, puoi fare una cosa molto carina.
Tipicamente i DB restituiscono (o meglio ci occorre che ci restituiscano)
molte più colonne di quelle che vogliamo visualizzare.
Se usi il DefaultTableModel, devi per forza visualizzarle tutte.
Con questa struttura, puoi ad esempio memorizzare in un'array le coppie
[colonna DB, colonna Tabella], così da visualizzare solo le colonne del DB
che ti interessano.
Ovvio che il codice si complica ma certamente di poco.
Spero di averti incasinato a sufficienza le idee e che deciderai non solo di
abbandonare gli studi informatici ma anche di creare un movimento
"no-informatic in the world".
P.S. se hai problemi (informatici, se fai uso di alcol o di sostanze
stupefacenti sono affari tua) fammi sapere.
Ciao :)