package net.sf.openrocket.gui.components;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
/*
* TODO: LOW: This is currently unused.
*/
public abstract class CollectionTable<T> extends JTable {
private final String[] columnNames;
private CollectionTableModel model;
protected CollectionTable(String[] columnNames) {
this.columnNames = columnNames.clone();
}
protected void initializeTable() {
model = new CollectionTableModel();
this.setModel(model);
}
/**
* Retrieve the object for the specified row number.
*
* @param row the row number being queried.
* @return the object at that row.
*/
protected abstract T getModelObjectAt(int row);
protected abstract int getModelRowCount();
protected abstract Object getViewForModelObject(T object, int column);
protected Class<?> getViewColumnClass(int column) {
return Object.class;
}
private class CollectionTableModel extends AbstractTableModel {
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public Class<?> getColumnClass(int column) {
return getViewColumnClass(column);
}
@Override
public int getRowCount() {
return getModelRowCount();
}
@Override
public Object getValueAt(int row, int column) {
T value = getModelObjectAt(row);
return getViewForModelObject(value, column);
}
}
}