1 21 22 package swingwtx.swing.table; 23 24 import swingwtx.swing.event.*; 25 26 import java.util.*; 27 import java.io.*; 28 29 public class DefaultTableModel extends AbstractTableModel implements Serializable { 30 31 protected Vector dataVector = new Vector(); 32 protected Vector columnIdentifiers = new Vector(); 33 34 public DefaultTableModel() { 35 this(0, 0); 36 } 37 38 public DefaultTableModel(Vector columnNames, int rowCount) { 39 setDataVector(new Vector(rowCount), columnNames); 40 } 41 42 public DefaultTableModel(Object [] columnNames, int rowCount) { 43 this(convertToVector(columnNames), rowCount); 44 } 45 46 public DefaultTableModel(int rowCount, int columnCount) { 47 this(new Vector(columnCount), rowCount); 48 } 49 50 public DefaultTableModel(Vector data, Vector columnNames) { 51 setDataVector(data, columnNames); 52 } 53 54 public DefaultTableModel(Object [][] data, Object [] columnNames) { 55 setDataVector(data, columnNames); 56 } 57 58 public Vector getDataVector() { 59 return dataVector; 60 } 61 62 public void setDataVector(Vector dataVector, Vector columnIdentifiers) { 63 if (dataVector == null) dataVector = new Vector(); 64 this.dataVector = dataVector; 65 this.columnIdentifiers = columnIdentifiers; 66 updateRowData(0, getRowCount()); 67 fireTableStructureChanged(); 68 } 69 70 public void setDataVector(Object [][] dataVector, Object [] columnIdentifiers) { 71 setDataVector(convertToVector(dataVector), convertToVector(columnIdentifiers)); 72 } 73 74 public void newDataAvailable(TableModelEvent event) { 75 fireTableChanged(event); 76 } 77 78 public void newRowsAdded(TableModelEvent e) { 79 updateRowData(e.getFirstRow(), e.getLastRow() + 1); 80 fireTableChanged(e); 81 } 82 83 public void rowsRemoved(TableModelEvent event) { 84 fireTableChanged(event); 85 } 86 87 public void setNumRows(int rowCount) { 88 int old = getRowCount(); 89 if (old == rowCount) { 90 return; 91 } 92 dataVector.setSize(rowCount); 93 if (rowCount <= old) { 94 fireTableRowsDeleted(rowCount, old - 1); 95 } 96 else { 97 updateRowData(old, rowCount); 98 fireTableRowsInserted(old, rowCount - 1); 99 } 100 } 101 102 public void setRowCount(int rowCount) { 103 setNumRows(rowCount); 104 } 105 106 public void addRow(Vector rowData) { 107 insertRow(getRowCount(), rowData); 108 } 109 110 public void addRow(Object [] rowData) { 111 addRow(convertToVector(rowData)); 112 } 113 114 115 public void addColumn(Object columnName) { 116 addColumn(columnName, (Vector)null); 117 } 118 119 public void addColumn(Object columnName, Vector columnData) { 120 columnIdentifiers.addElement(columnName); 121 if (columnData != null) { 122 int columnSize = columnData.size(); 123 if (columnSize > getRowCount()) { 124 dataVector.setSize(columnSize); 125 } 126 updateRowData(0, getRowCount()); 127 int newColumn = getColumnCount() - 1; 128 for(int i = 0; i < columnSize; i++) { 129 Vector row = (Vector) dataVector.elementAt(i); 130 row.setElementAt(columnData.elementAt(i), newColumn); 131 } 132 } 133 else { 134 updateRowData(0, getRowCount()); 135 } 136 137 fireTableStructureChanged(); 138 } 139 140 public void addColumn(Object columnName, Object [] columnData) { 141 addColumn(columnName, convertToVector(columnData)); 142 } 143 144 public void insertRow(int row, Vector rowData) { 145 dataVector.insertElementAt(rowData, row); 146 updateRowData(row, row+1); 147 fireTableRowsInserted(row, row); 148 } 149 150 public void insertRow(int row, Object [] rowData) { 151 insertRow(row, convertToVector(rowData)); 152 } 153 154 public void removeRow(int row) { 155 dataVector.removeElementAt(row); 156 fireTableRowsDeleted(row, row); 157 } 158 159 public void setColumnIdentifiers(Vector columnIdentifiers) { 160 setDataVector(dataVector, columnIdentifiers); 161 } 162 163 public void setColumnIdentifiers(Object [] newIdentifiers) { 164 setColumnIdentifiers(convertToVector(newIdentifiers)); 165 } 166 167 public void setColumnCount(int columnCount) { 168 columnIdentifiers.setSize(columnCount); 169 updateRowData(0, getRowCount()); 170 fireTableStructureChanged(); 171 } 172 173 public int getRowCount() { 174 return dataVector.size(); 175 } 176 177 public int getColumnCount() { 178 return columnIdentifiers.size(); 179 } 180 181 public String getColumnName(int column) { 182 return columnIdentifiers.elementAt(column).toString(); 183 } 184 185 public boolean isCellEditable(int row, int column) { 186 return true; 187 } 188 189 public Object getValueAt(int row, int column) { 190 Vector rowVector = (Vector)dataVector.elementAt(row); 191 return rowVector.elementAt(column); 192 } 193 194 public void setValueAt(Object aValue, int row, int column) { 195 Vector rowVector = (Vector)dataVector.elementAt(row); 196 rowVector.setElementAt(aValue, column); 197 fireTableCellUpdated(row, column); 198 } 199 200 protected static Vector convertToVector(Object [] anArray) { 201 Vector v = new Vector(anArray.length); 202 for (int i=0; i < anArray.length; i++) { 203 v.addElement(anArray[i]); 204 } 205 return v; 206 } 207 208 protected static Vector convertToVector(Object [][] anArray) { 209 Vector v = new Vector(anArray.length); 210 for (int i=0; i < anArray.length; i++) { 211 v.addElement(convertToVector(anArray[i])); 212 } 213 return v; 214 } 215 216 private void updateRowData(int from, int to) { 217 dataVector.setSize(getRowCount()); 218 for (int i = from; i < to; i++) { 219 if (dataVector.elementAt(i) == null) { 220 dataVector.setElementAt(new Vector(), i); 221 } 222 ((Vector) dataVector.elementAt(i)).setSize(getColumnCount()); 223 } 224 } 225 226 public void addTableModelListener(swingwtx.swing.event.TableModelListener l) { 227 listenerList.add(l); 228 } 229 230 public void removeTableModelListener(swingwtx.swing.event.TableModelListener l) { 231 listenerList.remove(l); 232 } 233 234 } 235 | Popular Tags |