package models;
import java.io.Serializable;
import java.util.Vector;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
public class MyTableModel
extends AbstractTableModel implements Serializable
{
protected Vector dataVector;
protected Vector columnIdentifiers;
public MyTableModel(Vector data, Vector columnNames)
{
setDataVector(data, columnNames);
}
public int getColumnCount()
{
return columnIdentifiers.size();
}
public int getRowCount()
{
return dataVector.size();
}
public String getColumnName(int column)
{
Object id = null;
// This test is to cover the case when
// getColumnCount has been subclassed by mistake ...
if (column < columnIdentifiers.size())
{
id = columnIdentifiers.elementAt(column);
}
return (id == null) ? super.getColumnName(column)
: id.toString();
}
public Object getValueAt(int row, int column)
{
Vector rowVector = (Vector)dataVector.elementAt(row);
return rowVector.elementAt(column);
}
public boolean isCellEditable(int row, int column)
{
return true;
}
public void setValueAt(Object aValue, int row, int column)
{
Vector rowVector = (Vector)dataVector.elementAt(row);
rowVector.setElementAt(aValue, column);
fireTableCellUpdated(row, column);
}
public Vector getDataVector() {
return dataVector;
}
public void setDataVector(Vector dataVector, Vector columnIdentifiers)
{
this.dataVector = nonNullVector(dataVector);
this.columnIdentifiers = nonNullVector(columnIdentifiers);
justifyRows(0, getRowCount());
fireTableStructureChanged();
}
public void addRow(Vector rowData) {
insertRow(getRowCount(), rowData);
}
public void insertRow(int row, Vector rowData) {
dataVector.insertElementAt(rowData, row);
justifyRows(row, row+1);
fireTableRowsInserted(row, row);
}
public void updateRow(int row, Vector rowData )
{
dataVector.setElementAt(rowData, row);
fireTableRowsUpdated(row, row);
}
public Vector getRowData(int row)
{
return (Vector)dataVector.elementAt(row);
}
public void removeRow(int row) {
dataVector.removeElementAt(row);
fireTableRowsDeleted(row, row);
}
private static Vector nonNullVector(Vector v)
{
return (v != null) ? v : new Vector();
}
private void justifyRows(int from, int to)
{
dataVector.setSize(getRowCount());
for (int i = from; i < to; i++) {
if (dataVector.elementAt(i) == null) {
dataVector.setElementAt(new Vector(), i);
}
((Vector)dataVector.elementAt(i)).setSize(getColumnCount());
}
}
public Class getColumnClass(int columnIndex)
{
return Object.class;
}
}