package jrex; import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; import java.util.List; import javax.swing.table.AbstractTableModel; /** * * @author Mark George <mark.george@otago.ac.nz> */ public final class MutableTableModel extends AbstractTableModel { private final Table<Integer, Integer, String> table = HashBasedTable.create(); private final List<String> headers; public MutableTableModel(List<String> headers) { this.headers = headers; } @Override public int getRowCount() { return table.rowKeySet().size(); } @Override public int getColumnCount() { return table.columnKeySet().size(); } @Override public String getColumnName(int columnIndex) { return headers.get(columnIndex); } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return table.get(rowIndex, columnIndex); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { table.put(rowIndex, columnIndex, aValue.toString()); fireTableCellUpdated(rowIndex, columnIndex); } public void addRow(List<String> values) { int rowCount = getRowCount(); for (int i = 0; i < values.size(); i++) { table.put(rowCount, i, values.get(i)); } fireTableRowsInserted(rowCount, rowCount); } public void addRow(String[] values) { int rowCount = getRowCount(); for (int i = 0; i < values.length; i++) { table.put(rowCount, i, values[i]); } fireTableRowsInserted(rowCount, rowCount); } public Table<Integer, Integer, String> getTable() { return table; } }