Вы можете использовать шаблон декоратора. Предполагая класс TableModelDecorator, который украшает TableModel, вы можете реализовать:
public class TableEmptyReverseRowsModel extends TableModelDecorator {
private int minimumRows;
public TableEmptyReverseRowsModel(final TableModel realModel,
final int minimumRows) {
super(realModel);
this.minimumRows = minimumRows;
}
public int getRowCount() {
int realCount = model.getRowCount();
return realCount < minimumRows ? minimumRows : realCount;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
int diff = minimumRows - model.getRowCount();
if (diff > 0) {
if (rowIndex < diff) {
return false;
} else {
return model.isCellEditable(rowIndex - diff, columnIndex);
}
} else {
return model.isCellEditable(rowIndex, columnIndex);
}
}
public Object getValueAt(int rowIndex, int columnIndex) {
int diff = minimumRows - model.getRowCount();
if (diff > 0) {
if (rowIndex < diff) {
return null;
} else {
return model.getValueAt(rowIndex - diff, columnIndex);
}
} else {
return model.getValueAt(rowIndex, columnIndex);
}
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
int diff = minimumRows - model.getRowCount();
if (diff > 0) {
if (rowIndex < diff) {
} else {
super.setValueAt(aValue, rowIndex - diff, columnIndex);
}
} else {
super.setValueAt(aValue, rowIndex, columnIndex);
}
}
}
Помните, что средство визуализации ячеек должно обрабатывать нулевое значение;)
Увидимся!