Tee uusi ikkuna, johon kuuluu JTable-elementti ja kaksi nappia 'Hae' ja 'Valitse'.
'Hae' -nappia painettaessa kutsutaan Jasen-luokan metodia haeKaikki(). JTable-elementin tiedot korvataan haetun tulosjoukon tiedoilla.
'Valitse' -nappia painettaessa päivitetään valitun rivin tiedot aiemmin tehdylle jäsenen tiedot -lomakkeelle toiseen ikkunaan; jossa ao. jäsenen tietoja voidaan päivittää, etc.
Periaatteessa sopivalle JTable:n constructorille voi antaa parametrina (Vector:ina tai Object[][] -taulukkona) JTable-elementissä näytettävän datan. (ks. javax.swing.JTable). Tällöin kuitenkin JTable:ssa näkyvä data on staattista, ts. sitä ei voi muuttaa (muutoinkuin poistamalla vanhan JTable-elementin lomakkeelta ja sijoittamalla sinne uuden).
Sen sijaan JTable:lle voidaan antaa parametrin oma TableModel -rajapinnan toteuttava tai AbstractTableModel -luokasta peritty luokka.
Esimerkki TableModel -luokasta:
public class PerusTableModel extends AbstractTableModel {
// Sarakkeiden otsikot voivat olla esim. String[] -arrayssä
// Taulun data voi olla esim. Vector:ssa tai Object[][] -arrayssä.
public PerusTableModel( String[] p_sOtsikot ) {
super();
.....
}
/**
* Palauttaa taulun sarakkeiden määrän. Swing-oliot kutsuvat.
*/
public int getColumnCount() {
....
}
/**
* Palauttaa taulun rivien määrän. Swing-oliot kutsuvat.
*/
public int getRowCount() {
....
}
/**
* Palauttaa sarakkeen nimen. Swing-oliot kutsuvat.
*/
public String getColumnName(int iCol) {
....
}
/**
* Palauttaa solun arvon. Swing-oliot kutsuvat.
*/
public Object getValueAt(int row, int col) {
....
}
/**
* Palauttaa sarakkeen luokan. Swing-oliot kutsuvat. c == sarakkeen nro.
*/
public Class getColumnClass(int c) {
....
}
/**
* Voiko käyttäjä muuttaa tietyn solu arvoa? Swing-oliot kutsuvat.
*/
public boolean isCellEditable(int row, int col) {
....
}
/**
* Asettaa tietyn solun arvon. Swing-oliot kutsuvat, kun käyttäjä on muuttanut
* solun arvoa.
*/
public void setValueAt(Object value, int row, int col) {
....
}
}
Ylläolevat metodit siis täytyy toteuttaa, jotta luokka kelpaisi TableModel:ksi. Tässä tapauksessa tarvittaneen lisäksi esim. metodeja, joilla saadaan ohjelmallisesti päivitettyä TableModel:iin uudet arvot.
Käytettäessä TableModel -luokkaa, saadaan koko taulun arvot vaihdettua seuraavilla käskyillä:
js.getViewport().setBackingStoreEnabled(false);
jt.clearSelection();
js.getViewport().setViewPosition(new Point(0,0));
jt.tableChanged(new TableModelEvent( model ));
js.getViewport().setBackingStoreEnabled(true);
missä:
jt == JTable
js == JScrollPane (jos JTable on sijoitettu JScrollPane:n sisälle)
model == TableModel