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