Visualizzazione dei risultati da 1 a 10 su 10

Discussione: JTable

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218

    JTable

    Non riesco a capire il funzionamento delle JTable.
    Devo crearne statiche (ovvero alla fine servono solo come layout) e dinamiche, aggiornando i dati da un database.

    Uso Eclipse con il Visual Editor, ma anche mettendo mano al codice non riesco a capire come crearne, come inserire i dati manualmente e via dicendo.

    Qualcuno può spiegarmi bene???

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JTable

    Originariamente inviato da TheBestNeo
    Non riesco a capire il funzionamento delle JTable.
    Qualcuno può spiegarmi bene???
    Hai già letto sul tutorial ufficiale How to Use Tables??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218

    Re: Re: JTable

    Originariamente inviato da andbin
    Hai già letto sul tutorial ufficiale How to Use Tables??
    Si, ma purtroppo non ho capito benissimo.
    Direi per niente visto che non ci riesco!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: JTable

    Originariamente inviato da TheBestNeo
    Si, ma purtroppo non ho capito benissimo.
    Direi per niente visto che non ci riesco!
    Cosa non ti è chiaro??? Innanzitutto la prima cosa da capire è che JTable è il componente che si occupa di gestire la tabella ma non si occupa di contenere/memorizzare i dati! I dati sono contenuti e gestiti in un "table model", un oggetto che deve implementare la interfaccia TableModel.
    La parte che si occupa di visualizzare i dati, non sa nulla di dove/come/quanti sono i dati .... si limita a chiedere informazioni al table model: "quante righe hai?" ... "quante colonne hai?" .... "come si chiama la colonna x?" ... "dammi l'oggetto alla riga y, colonna x" e così via.
    Se guardi la interfaccia javax.swing.table.TableModel vedrai che ci sono una serie di metodi che rispecchiano proprio queste informazioni e permettono quindi di "esporle" al di fuori.
    Come sia implementato un table model non è importante per JTable ... basta che rispetti quanto specificato da TableModel.

    Ad un oggetto JTable è sempre associato un TableModel. Anche quando crei il JTable con il costruttore JTable(Object[][] rowData, Object[] columnNames). In questo caso viene creato un table model "al volo" che semplicemente espone i dati passati al costruttore e le celle sono sempre tutte editabili.

    Alternative sono creare un DefaultTableModel, un table model che si basa su una struttura interna fatta come Vector di Vector. Oppure definire un proprio table model che estende AbstractTableModel e la cui struttura interna per i dati la puoi scegliere tu come ti pare e piace.

    Più chiaro ora?? Se fai ricerche sul forum trovi sicuramente degli esempi, anche miei che ho postato in passato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Si ora inizia a essere più chiaro.
    Ho provato ad implementare un tableModel, ma in VE non mi fa vedere se viene giusto o no.
    Ora per provare visto che non ho particolari specifiche mi consigli di usare il costruttore
    codice:
    JTable(Object[][] rowData, Object[] columnNames)
    ?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TheBestNeo
    Ora per provare visto che non ho particolari specifiche mi consigli di usare il costruttore
    codice:
    JTable(Object[][] rowData, Object[] columnNames)
    ?
    Ma dipende da come sono i tuoi dati! Immagina ad esempio di avere una classe Persona (con diverse proprietà es. nome, cognome ecc...) e di voler visualizzare un elenco di persone. Potresti avere un array Persona[] oppure una collezione ArrayList<Persona> ... concettualmente cambia poco. Ma in questo caso sarebbe più appropriato definire un proprio table model "modellato" su questo tipo di struttura dati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Originariamente inviato da andbin
    Ma dipende da come sono i tuoi dati! Immagina ad esempio di avere una classe Persona (con diverse proprietà es. nome, cognome ecc...) e di voler visualizzare un elenco di persone. Potresti avere un array Persona[] oppure una collezione ArrayList<Persona> ... concettualmente cambia poco. Ma in questo caso sarebbe più appropriato definire un proprio table model "modellato" su questo tipo di struttura dati.
    I dati devo inserirli completamente a mano.
    Per esempio nella cella [0][0] niente, nella cella [0][1] una label, in quella successiva un checkbutton e via dicendo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Penso di aver capito i tablemodel.

    Grazie mille!

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TheBestNeo
    I dati devo inserirli completamente a mano.
    Per esempio nella cella [0][0] niente, nella cella [0][1] una label, in quella successiva un checkbutton e via dicendo.
    Alt!! Qui allora bisogna fare un po' di premesse e precisazioni!

    Una cosa sono i dati ... puri dati, presenti nel "model" e un'altra cosa è il modo in cui sono presentati nelle celle del JTable ma è anche un'altra cosa il modo in cui i dati possono eventualmente essere editati.

    JTable si basa su dei "cell renderer", oggetti che implementano la interfaccia TableCellRenderer. E si basa su dei "cell editor", oggetti che implementano la interfaccia TableCellEditor. Un cell renderer si occupa di fornire il componente per visualizzare il dato mentre invece un cell editor si occupa di fornire il componente per editare il dato.

    JTable ha una mappatura che permette di associare un tipo es. java.lang.String ad un renderer/editor. Esiste una mappatura di default che si può comunque alterare/ampliare. Se vuoi ad esempio che in una colonna venga visualizzato e gestito un "check box", allora il dato restituito dal table model deve essere di tipo Boolean (getValueAt() ritorna un Object) e getColumnClass() deve restituire la classe java.lang.Boolean.

    Non continuo ... sarebbe lungo. E tutto quanto ti ho detto adesso e in precedenza è ben spiegato, credo, nel documento che ho linkato prima.

    Consiglio personale: invece di partire in quarta, cerca di capire e comprendere bene come funziona tutta questa architettura di JTable, model, renderer e editor.
    Se anche dopo aver letto quella documentazione e dopo aver letto la mia spiegazione ti è ancora tutto molto oscuro .... beh, credo che tu debba fare molti passi indietro e studiare molto bene e meglio questa cosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Ho letto quella parte e sono riuscito ad ottenere i checkbox.
    Ora mi ci applico un po'.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.