//: c14:JTableDemo.java // Proste przedstawienie tabeli JTable. // <applet code=Table width=350 height=200></applet> import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.table.*; import javax.swing.event.*; import com.bruceeckel.swing.*; public class JTableDemo extends JApplet { private JTextArea txt = new JTextArea(4, 20); // Wszystkie dane są kontrolowane przez obiekt TableModel: class DataModel extends AbstractTableModel { Object[][] data = { {"jeden", "dwa", "trzy", "cztery"}, {"pięć", "sześć", "siedem", "osiem"}, {"dziewięć", "dziesięć", "jedynaście", "dwanaście"}, }; // Wyświetla dane gdy zmieni się zawartość tabeli: class TML implements TableModelListener { public void tableChanged(TableModelEvent e) { txt.setText(""); // Clear it for(int i = 0; i < data.length; i++) { for(int j = 0; j < data[0].length; j++) txt.append(data[i][j] + " "); txt.append("\n"); } } } public DataModel() { addTableModelListener(new TML());} public int getColumnCount() { return data[0].length; } public int getRowCount() { return data.length; } public Object getValueAt(int row, int col) { return data[row][col]; } public void setValueAt(Object val, int row, int col) { data[row][col] = val; // Informuje że dokonano zmiany: fireTableDataChanged(); } public boolean isCellEditable(int row, int col) { return true; } } public void init() { Container cp = getContentPane(); JTable table = new JTable(new DataModel()); cp.add(new JScrollPane(table)); cp.add(BorderLayout.SOUTH, txt); } public static void main(String[] args) { Console.run(new JTableDemo(), 350, 200); } } ///:~