JTable
Cos’è una JTable
Una JTable è un elemento Swing che rende possibile visualizzare delle informazioni sotto forma di tabella e
se necessario ne permette la modifica.
Header - Nelle JTabel è possibile dare
un nome ad ogni colonna.
Esempio:
Ogni colonna può contenere un solo tipo
di dati
Colonne e righe sono numerate partendo
da zero.
L’Header non conta nella numerazione:
Nome
Cognome
Età
C0-R0
C1-R0
C2-R0
C0-R1
C1-R1
C2-R1
C0-R2
C1-R2
C2-R2
C0-R3
C1-R3
C2-R3
Come creare una JTable
// Inizializzare una JTable
JTable tabellaEsempio ;
// Creare un array di String contenente i titoli delle singole colonne
String nomiColonne [ ] = {"Nome", "Cognome", "Età"};
// Creare una matrice contenente nell’ordine esatto i valori da inserire
String valoriDaInserire [ ][ ] = {
{"Mario", "Rossi", "35"},
{"Rosaria", "Bruno", "48"},
{"Maria", "Galli", "29"},
{"Alberto", "Esposito" , "26"}
};
// Istanziare la JTable passando come parametri matrice di valori e array di titoli
tabellaEsempio = new JTable(valoriDaInserire , nomiColonne );
// Inserire la JTable in un JScrollPane
(Specialmente se la ci sono numerosi valori da inserire)
JScrollPane mioScrollPane =new JScrollPane( tabellaEsempio );
// e aggiungerlo a un oggetto contenitore.
mioJPanel.add(mioScrollPane );
TableModel
Ogni istanza di JTable utilizza un’ istanza di TableModel per gestire i dati che tratta. Un oggetto TableModel
quindi deve implementare l’interfaccia TableModel. Se il programmatore non fornisce lui stesso un’istanza
di TableModel, automaticamente la JTable creerà un’ istanza di DefaultTableModel.
Classe astratta AbstractTableModel che estende direttamente Object
Classe figlia DefaultTableModel
Interfaccia TableModel
L’interfaccia TableModel specifica i metodi che JTable dovrà utilizzare per interrogare dei dati in forma
tabellare.
Per fare in modo che una JTable utilizzi un certo tipo di modello dobbiamo generare un’istanza di
TableModel e utilizzarla come parametro quando creiamo un oggetto JTable.
TableModel mieiDati = new MioModelloTabella ();
JTable miaTabella = new JTable(mieiDati);
Come usare TableModel
class MioModelloTabella extends AbstractTableModel {
private String[] columnNames = //inserisco i dati come prima, al posto di passarli come
parametro all’istanza della JTable
private Object[][] data =
//li inserisco qui.
public int getColumnCount() {return columnNames.length; } //ritorna il numero di colonne
public int getRowCount() {return data.length; } //ritorna il numero di righe
public String getColumnName(int col) {return columnNames[col]; } //ritorna i “titoli” delle
colonne
public Object getValueAt(int row, int col) { return data[row][col];} //legge il valore in una
cella della quale vengono passate le coordinate
public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}//questo è molto
importante perchè di default le colonne contengono solo String, questo permette invece, data la
colonna di utilizzare anche altri tipi di dati.
}
Già in questo modo la stessa tabella generata prima, potrebbe contenere anche colonne contenenti booleani, int o altri tipi
di dati. In questo modo possiamo quindi sfruttare l’interfaccia TableModel per valutare e eventualmente modificare anche
altri aspetti come ad esempio la possibilità di rendere o meno modificabili dall’utente i dati mostrati nella tabella.
Metodi applicabili a JTable
Gestire l’altezza delle righe di celle:
.setRowHeight(int altezza);
Setta l’altezza di tutte le righe.
Parametro: altezza in px
.setRowHeight(int riga, int altezza); Setta l’altezza di una riga.
Parametri: numero riga, altezza in px
.getRowHeight();
Ritorna un int, l’altezza in pixel delle righe
.getRowHeight(int riga);
Ritorna un int, l’altezza in pixel di una singola riga
Parametro: numero della riga
Gestire la distanza tra bordo della cella e contenuto:
.setIntercellSpacing(Dimension misure) Setta le “dimensioni” della distanza tra il bordo delle celle e
il loro contenuto.
Parametro: misure distanza in larghezza e altezza
getIntercellSpacing()
Ritorna un Dimension
Dimension d;
d= new Dimension(30,100);
Il primo parametro è la larghezza, il secondo l’altezza, entrambi in px.
Metodi per la selezione
SELEZIONE:
.setSelectionMode(ListSelectionModel.modellodiselezione) Definisce la modalità di selezione
Parametro: modalità di selezione
.selectAll()
Seleziona tutte le celle,
colonne e righe della
ListSelectionModel:
tabella.
.clearSelection()
Deseleziona tutto.
MULTIPLE_INTERVAL_SELECTION
SELEZIONE CELLE:
.setCellSelectionEnabled(boolean)
Se true permette la selezione simultanea tra una riga e una
colonna, che interessa quindi una cella in particolare.
.getCellSelectionEnabled()
Se ritorna true permette quanto scritto sopra.
.isCellSelected(int righe, int colonne)
Ritorna un boolean. Passando come parametri le coordinate
della singola cella, quindi riga e colonna di appartenenza,
riceviamo true se la cella è selezionata o false in caso contrario.
Permette di selezionare in una sola volta
più valori vicini.
SINGLE_INTERVAL_SELECTION
Permente di selezionare nell’indice un
intervallo vicino.
SINGLE_SELECTION
Permette di selezionare un solo indice alla
volta.
Metodi per la selezione di righe
SELEZIONARE RIGHE:
.setRowSelectionAllowed( boolean) Se true permette la selezione delle righe della tabella.
.setRowSelectionInterval( int indiceInizio, int indiceFine )
Seleziona grazie ai valori di indice passati come parametri un intervallo di righe, estremi inclusi.
.addRowSelectionInterval( int indiceInizio, int indiceFine )
Grazie ai valori di indice passati come parametri, aggiunge un intervallo di righe, estremi inclusi a quelli già
selezionati.
.removeRowSelectionInterval( int indiceInizio, int indiceFine )
Deseleziona grazie ai valori di indice passati come parametri un intervallo di righe, estremi inclusi.
.getSelectedRow()
Tenendo conto dell’ordine di indice, restituisce l’int dell’indice della prima riga selezionata, -1 se non ne
trova nessuna.
.getSelectedRows()
Ritorna un array con gli indici di tutte le righe selezionate
.getSelectedRowCount()
Ritorna il numero di righe selezionate
.isRowSelected(int riga)
Passando come parametro l’indice di una riga, restituisce true se questa è selezionata, false
se non lo è.
Metodi per la selezione di colonne
SELEZIONARE COLONNE:
.setColumnSelectionAllowed( boolean) Se true permette la selezione delle colonne della tabella.
.setColumnSelectionInterval( int indiceInizio, int indiceFine )
Seleziona grazie ai valori di indice passati come parametri un intervallo di colonne, estremi inclusi.
.addColumnSelectionInterval( int indiceInizio, int indiceFine )
Grazie ai valori di indice passati come parametri, aggiunge un intervallo di colonne, estremi inclusi a quelli
già selezionati.
.removeColumnSelectionInterval( int indiceInizio, int indiceFine )
Deseleziona grazie ai valori di indice passati come parametri un intervallo di colonne, estremi inclusi.
.getSelectedColumn()
Tenendo conto dell’ordine di indice, restituisce l’int dell’indice della prima colonna selezionata, -1 se non ne
trova nessuna.
.getSelectedColumns()
Ritorna un array con gli indici di tutte le colonne selezionate
.getSelectedColumnCount()
Ritorna il numero di colonne selezionate
.isColumnSelected(int colonna)
Passando come parametro l’indice di una colonna, restituisce true se questa è selezionata, false
se non lo è.
Metodi per modificare colori e visibilità
COLORE DI SFONDO, GRIGLIA E TESTO:
Settare il colore e visibilità delle linee tra le celle della JTable:
.setGridColor(Color miocolore)
.getGridColor()
.setShowGrid(boolean b)
.setShowHorizontalLines(boolean b)
.setShowVerticalLines(boolean b)
.getShowHorizontalLines()
.getShowVerticalLines()
Setta il colore della griglia (default: nero)
Parametro:colore;
Ritorna il colore della griglia
Mostra/nasconde la griglia
Mostra/nasconde le linee orizzontali
Mostra/nasconde le linee verticali
Ritorna true se le linee sono visibili.
Ritorna true se le linee sono visibili.
Cambiare colore a sfondo e testo delle celle selezionate:
.getSelectionForeground()
Ritorna il colore del testo nelle celle selezionate
.setSelectionForeground(Color coloreTesto) Setta il colore del testo nelle celle selezionate
.getSelectionBackground()
Ritorna il colore dello sfondo delle
celle selezionate
.setSelectionBackground(Color coloreSfondo) Setta il colore dello sfondo delle
celle selezionate
Metodi per il ridimensionamento automatico
Per gestire il resize automatico delle colonne:
.setAutoResizeMode(JTable.metodo)
Gestisce i possibili metodi di ridimensionamento delle colonne.
.getAutoResizeMode()
Ritorna uno dei 5 metodi di auto-resize
.doLayout()
Fa in modo che qualunque sia la dimensione
della finestra nella quale è contenuta la
tabella, la sua larghezza sia uguale alla
somma delle larghezze di tutte le colonne
presenti.
.setAutoResizeMode(JTable.
metodoDiRidimensionamentoAutomatico)
default:AUTO_RESIZE_SUBSEQUENT_COLUMNS
AUTO_RESIZE_OFF: Non permette che le colonne si
ridimensionino. Se la JTable è inclusa in un JScrollPane si serve di
una scrollbar orizzontale, in caso contrario è possibile che parti della
tabella restino nascoste.
AUTO_RESIZE_NEXT_COLUMN: Fa in modo che in seguito al
ridimensionamento di una colonna, ne subisca le conseguenze quella
immediatamente a destra.
AUTO_RESIZE_SUBSEQUENT_COLUMNS: Use all columns
after the one being adjusted to absorb the changes. This is the default
behavior.
AUTO_RESIZE_LAST_COLUMN: Fa in modo che in seguito al
ridimensionamento di una colonna, ne subisca le conseguenze quella
immediatamente a sinistra.
AUTO_RESIZE_ALL_COLUMNS: Influenza le dimensioni di
tutte le colonne.
Metodi getter & setter per i modelli
.setModel(TableModel nuovoModello)
Imposta il TableModel passato come parametro.
.getModel()
Ritorna il TableModel che si occupa della gestione dei dati della JTable che si utilizza.
.setColumnModel(TableColumnModel nuovoModelloColonne)
Imposta il TableColumnModel passato come parametro.
.getColumnModel()
Ritorna il TableColumnModel che si occupa della gestione dei dati della JTable che si utilizza.
.setSelectionModel(TableSelectionModel nuovoModelloSelezione)
Imposta il TableSelectionModel passato come parametro.
.getSelectionModel()
Ritorna il TableSelectionModel che si occupa della gestione dei dati della JTable che si utilizza.
Metodi per la gestione delle colonne
.getColumn(Object identificatore)
Ritorna la colonna con l’identificatore passato come parametro.
.getColumnName(int colonna)
Ritorna il nome di una colonna
.getColumnClass(int colonna)
Ritorna il tipo di Object che la colonna può contenere
.addColumn(TableColumn unaColonna)
Aggiunge una colonna alla JTable
.removeColumn(TableColumn unaColonna)
Rimuove una colonna dalla JTable
.moveColumn( int colonna, int posizioneInCuiSpostarla)
Passandogli la colonna che si vuole spostare e la colonna al posto della quale
si vuole posizionare, sposta la colonna.
Metodi per la gestione dei valori
.getRowCount()
Restituisce il numero di righe presenti nella JTable
.getColumnCount()
Restituisce il numero di colonne presenti nella JTable
.getValueAt( int riga, int colonna)
Ricevendo le coordinate in righe e colonne di una singola cella ne restituisce il contenuto.
.setValueAt( Object valore, int riga, int colonna )
Ricevendo il valore da settare e le coordinate di una cella, ci posiziona dentro il contenuto.
Metodi per la gestire le possibilità di modifica dati
.isCellEditable( int row, int column )
Ricevendo le coordinate di una cella, ritorna true se questa è modificabile.
.editCellAt( int row, int column )
Permette di modificare il contenuto di una cella a patto che questa esista e sia modificabile.
.isEditing()
Ritorna true se il contenuto della cella è stato modificato
.getEditorComponent()
Ritorna l’elemento modificato.
.getEditingColumn()
Ritorna la colonna nel quale è presente l’elemento modificato.
.getEditingRow()
Ritorna la riga nel quale è presente l’elemento modificato.
.getCellEditor()
Ritorna la cella che contiene il contenuto modificato
.setCellEditor(TableCellEditor anEditor)
Attiva l’editor di una cella
.setEditingColumn(int aColumn)
Attiva l’editor di una colonna
.setEditingRow(int aRow)
Attiva l’editor di una riga
Marianna Boi, Antonio Bugni
Scarica

Untitled