Newer
Older
jrex / src / jrex / MutableTableModel.java
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;
	}

}