001 package util.swing;
002
003 import javax.swing.event.TableModelListener;
004 import javax.swing.event.TableModelEvent;
005
006 /**
007 * In a chain of data manipulators some behaviour is common. TableMap
008 * provides most of this behavour and can be subclassed by filters
009 * that only need to override a handful of specific methods. TableMap
010 * implements TableModel by routing all requests to its model, and
011 * TableModelListener by routing all events to its listeners. Inserting
012 * a TableMap which has not been subclassed into a chain of table filters
013 * should have no effect.
014 *
015 *
016 * @version 1.4 12/17/97
017 * @author Philip Milne
018 * @author Thomas Medack
019 */
020 public class TableMap extends AbstractTableModel implements TableModelListener {
021
022 /**
023 * The original TableModel
024 */
025 protected AbstractTableModel model;
026
027 /**
028 * Set the table's data. This actually has no effect here.
029 */
030 public void setData(Object n_lModel) {
031 }
032
033 /**
034 * Constructor
035 */
036 public TableMap() {
037 super(null);
038
039 }
040
041 /**
042 * Returns the TableModel.
043 *
044 * @return the TableModel.
045 */
046 public AbstractTableModel getModel() {
047 return model;
048 }
049
050 /**
051 * Sets the TableModel.
052 *
053 * @param model the TableModel.
054 */
055 public void setModel(AbstractTableModel model) {
056 this.model = model;
057 model.addTableModelListener(this);
058 }
059
060 // By default, implement TableModel by forwarding all messages
061 // to the model.
062
063 /**
064 * Gets the value of a table cell.
065 *
066 * @param aRow row to get the value from.
067 * @param aColumn column to get the value from.
068 * @return the value at (aRow, aColumn).
069 */
070 public Object getValueAt(int aRow, int aColumn) {
071 return model.getValueAt(aRow, aColumn);
072 }
073
074 /**
075 * Changes the value of a table cell.
076 *
077 * @param aValue the value to set.
078 * @param aRow the row of the TableCell to be changed.
079 * @param aColumn the column of the table cell to be changed.
080 */
081 public void setValueAt(Object aValue, int aRow, int aColumn) {
082 model.setValueAt(aValue, aRow, aColumn);
083 }
084
085 /**
086 * Returns the number of rows.
087 *
088 * @return the number of rows.
089 */
090 public int getRowCount() {
091 return (model == null) ? 0 : model.getRowCount();
092 }
093
094 /**
095 * Returns the number of columns.
096 *
097 * @return the number of columns.
098 */
099 public int getColumnCount() {
100 return (model == null) ? 0 : model.getColumnCount();
101 }
102
103 /**
104 * Returns the column's names.
105 *
106 * @param aColumn the affected column.
107 * @return columns' names.
108 */
109 public String getColumnName(int aColumn) {
110 return model.getColumnName(aColumn);
111 }
112
113 /**
114 * @param nIndex the affected column.
115 * @return columns' classes. They indicate how column's values should be aligned.
116 */
117 public Class getColumnClass(int aColumn) {
118 return model.getColumnClass(aColumn);
119 }
120
121 /**
122 * Returns if cell is editable or not.
123 *
124 * @param row the affected table row.
125 * @param column the affected column.
126 * @return <ul><li>true: cell is editable</li>
127 * <li>false: cell is not editable</li></ul>
128 */
129 public boolean isCellEditable(int row, int column) {
130 return model.isCellEditable(row, column);
131 }
132
133 /**
134 * Gets the record.
135 *
136 * @param row the affected table row.
137 * @return the appropriate record.
138 */
139 public Object getRecord(int row) {
140 return model.getRecord(row);
141 }
142
143 /**
144 * Reacts on TableChangeEvents.
145 * @param e the event.
146 */
147 public void tableChanged(TableModelEvent e) {
148 fireTableChanged(e);
149 }
150 }