package org.hwo.models; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; public class FlexibleObjectTableModel extends AbstractTableModel{ List columns; List rows; Class p_classinfo; public FlexibleObjectTableModel(Class tClass) { this.columns = new ArrayList(); this.rows = new ArrayList(); this.p_classinfo = tClass; } public void addColumn(String fieldName) { this.addColumn(fieldName,true); } public void addColumn(String fieldName,boolean readOnly) { try { this.columns.add(new Column(this.p_classinfo,fieldName,readOnly)); fireTableStructureChanged(); } catch (NoSuchFieldException nsfex) { System.err.println(nsfex.toString()); nsfex.printStackTrace(); } } public List getRows() { return this.rows; } public void setRows(List rows) { this.rows = rows; this.fireTableDataChanged(); } public int indexOf(Object o) { return this.rows.indexOf(o); } public void addRow(T o) { this.rows.add(o); this.fireTableDataChanged(); } public void removeRow(T o) { this.rows.remove(o); this.fireTableDataChanged(); } public void removeRow(int row) { this.rows.remove(row); this.fireTableDataChanged(); } @Override public int getColumnCount() { return this.columns.size(); } @Override public int getRowCount() { return this.rows.size(); } @Override public Object getValueAt(int arg0, int arg1) { return this.columns.get(arg1).getValue(this.rows.get(arg0)); } @Override public String getColumnName(int columnIndex) { return this.columns.get(columnIndex).getFieldName(); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { this.columns.get(columnIndex).setValue(this.rows.get(rowIndex), aValue); } @Override public boolean isCellEditable(int rowIndex,int columnIndex) { return !this.columns.get(columnIndex).getReadOnly(); } @Override public Class getColumnClass(int columnIndex) { return this.columns.get(columnIndex).getColumnClass(); } }