diff options
Diffstat (limited to 'javax/swing/table/DefaultTableModel.java')
-rw-r--r-- | javax/swing/table/DefaultTableModel.java | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/javax/swing/table/DefaultTableModel.java b/javax/swing/table/DefaultTableModel.java index c281caa07..09be2f752 100644 --- a/javax/swing/table/DefaultTableModel.java +++ b/javax/swing/table/DefaultTableModel.java @@ -294,12 +294,7 @@ public class DefaultTableModel extends AbstractTableModel else { int rowsToAdd = rowCount - existingRowCount; - for (int i = 0; i < rowsToAdd; i++) - { - Vector tmp = new Vector(); - tmp.setSize(columnIdentifiers.size()); - dataVector.add(tmp); - } + addExtraRows(rowsToAdd, columnIdentifiers.size()); fireTableRowsInserted(existingRowCount,rowCount-1); } } @@ -366,12 +361,7 @@ public class DefaultTableModel extends AbstractTableModel if (columnData.length > dataVector.size()) { int rowsToAdd = columnData.length - dataVector.size(); - for (int i = 0; i < rowsToAdd; i++) - { - Vector tmp = new Vector(); - tmp.setSize(columnIdentifiers.size()); - dataVector.add(tmp); - } + addExtraRows(rowsToAdd, columnIdentifiers.size()); } else if (columnData.length < dataVector.size()) { @@ -502,7 +492,8 @@ public class DefaultTableModel extends AbstractTableModel else { if (column < getColumnCount()) - { + { + checkSize(); Object id = columnIdentifiers.get(column); if (id != null) result = id.toString(); @@ -588,4 +579,41 @@ public class DefaultTableModel extends AbstractTableModel vector.add(convertToVector(data[i])); return vector; } + + /** + * This method adds some rows to <code>dataVector</code>. + * + * @param rowsToAdd number of rows to add + * @param nbColumns size of the added rows + */ + private void addExtraRows(int rowsToAdd, int nbColumns) + { + for (int i = 0; i < rowsToAdd; i++) + { + Vector tmp = new Vector(); + tmp.setSize(columnIdentifiers.size()); + dataVector.add(tmp); + } + } + + /** + * Checks the real columns/rows sizes against the ones returned by + * <code>getColumnCount()</code> and <code>getRowCount()</code>. + * If the supposed one are bigger, then we grow <code>columIdentifiers</code> + * and <code>dataVector</code> to their expected size. + */ + private void checkSize() + { + int columnCount = getColumnCount(); + int rowCount = getRowCount(); + + if (columnCount > columnIdentifiers.size()) + columnIdentifiers.setSize(columnCount); + + if (rowCount > dataVector.size()) + { + int rowsToAdd = rowCount - dataVector.size(); + addExtraRows(rowsToAdd, columnCount); + } + } } |