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 * ID for serialization.
024 */
025 private static final long serialVersionUID = 334802292852356320L;
026
027 /**
028 * The original TableModel
029 */
030 protected AbstractTableModel model;
031
032 /**
033 * Set the table's data. This actually has no effect here.
034 */
035 public void setData(Object n_lModel) {
036 }
037
038 /**
039 * Constructor
040 */
041 public TableMap() {
042 super(null);
043
044 }
045
046 /**
047 * Returns the TableModel.
048 *
049 * @return the TableModel.
050 */
051 public AbstractTableModel getModel() {
052 return model;
053 }
054
055 /**
056 * Sets the TableModel.
057 *
058 * @param model the TableModel.
059 */
060 public void setModel(AbstractTableModel model) {
061 this.model = model;
062 model.addTableModelListener(this);
063 }
064
065 // By default, implement TableModel by forwarding all messages
066 // to the model.
067
068 /**
069 * Gets the value of a table cell.
070 *
071 * @param aRow row to get the value from.
072 * @param aColumn column to get the value from.
073 * @return the value at (aRow, aColumn).
074 */
075 public Object getValueAt(int aRow, int aColumn) {
076 return model.getValueAt(aRow, aColumn);
077 }
078
079 /**
080 * Changes the value of a table cell.
081 *
082 * @param aValue the value to set.
083 * @param aRow the row of the TableCell to be changed.
084 * @param aColumn the column of the table cell to be changed.
085 */
086 public void setValueAt(Object aValue, int aRow, int aColumn) {
087 model.setValueAt(aValue, aRow, aColumn);
088 }
089
090 /**
091 * Returns the number of rows.
092 *
093 * @return the number of rows.
094 */
095 public int getRowCount() {
096 return (model == null) ? 0 : model.getRowCount();
097 }
098
099 /**
100 * Returns the number of columns.
101 *
102 * @return the number of columns.
103 */
104 public int getColumnCount() {
105 return (model == null) ? 0 : model.getColumnCount();
106 }
107
108 /**
109 * Returns the column's names.
110 *
111 * @param aColumn the affected column.
112 * @return columns' names.
113 */
114 public String getColumnName(int aColumn) {
115 return model.getColumnName(aColumn);
116 }
117
118 /**
119 * @param aColumn the affected column.
120 * @return columns' classes. They indicate how column's values should be aligned.
121 */
122 public Class<?> getColumnClass(int aColumn) {
123 return model.getColumnClass(aColumn);
124 }
125
126 /**
127 * Returns if cell is editable or not.
128 *
129 * @param row the affected table row.
130 * @param column the affected column.
131 * @return <ul><li>true: cell is editable</li>
132 * <li>false: cell is not editable</li></ul>
133 */
134 public boolean isCellEditable(int row, int column) {
135 return model.isCellEditable(row, column);
136 }
137
138 /**
139 * Gets the record.
140 *
141 * @param row the affected table row.
142 * @return the appropriate record.
143 */
144 public Object getRecord(int row) {
145 return model.getRecord(row);
146 }
147
148 /**
149 * Reacts on TableChangeEvents.
150 * @param e the event.
151 */
152 public void tableChanged(TableModelEvent e) {
153 fireTableChanged(e);
154 }
155 }