package org.aitools.programd.interfaces.graphical; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; /** * In a chain of data manipulators some behaviour is common. TableMap provides most of this behavour and can be * subclassed by filters that only need to override a handful of specific methods. TableMap implements TableModel by * routing all requests to its model, and TableModelListener by routing all events to its listeners. Inserting a * TableMap which has not been subclassed into a chain of table filters should have no effect. * * @author Philip Milne * @author <a href="mailto:noel@aitools.org">Noel Bush</a> */ public class TableMap extends AbstractTableModel implements TableModelListener { /** * */ private static final long serialVersionUID = 1L; protected TableModel model; /** * @see javax.swing.table.AbstractTableModel#getColumnClass(int) */ @Override public Class<?> getColumnClass(int aColumn) { return this.model.getColumnClass(aColumn); } /** * @see javax.swing.table.TableModel#getColumnCount() */ @Override public int getColumnCount() { return this.model == null ? 0 : this.model.getColumnCount(); } // By default, implement TableModel by forwarding all messages // to the model. /** * @see javax.swing.table.AbstractTableModel#getColumnName(int) */ @Override public String getColumnName(int aColumn) { return this.model.getColumnName(aColumn); } /** * @return the table model */ public TableModel getModel() { return this.model; } /** * @see javax.swing.table.TableModel#getRowCount() */ @Override public synchronized int getRowCount() { return this.model == null ? 0 : this.model.getRowCount(); } /** * @see javax.swing.table.TableModel#getValueAt(int, int) */ @Override public Object getValueAt(int aRow, int aColumn) { return this.model.getValueAt(aRow, aColumn); } /** * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int) */ @Override public boolean isCellEditable(int row, int column) { return this.model.isCellEditable(row, column); } /** * Sets the TableMap's model to the given model. * * @param modelToSet the model to set */ public synchronized void setModel(TableModel modelToSet) { this.model = modelToSet; this.model.addTableModelListener(this); } /** * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int) */ @Override public void setValueAt(Object aValue, int aRow, int aColumn) { this.model.setValueAt(aValue, aRow, aColumn); } /** * @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent) */ @Override public void tableChanged(TableModelEvent e) { this.fireTableChanged(e); } }