package gui; import java.util.Vector; import javax.swing.table.AbstractTableModel; @SuppressWarnings("serial") public class InteractiveTableModel extends AbstractTableModel { public static final int LOCATION_INDEX = 0; public static final int LONGITUDE_INDEX = 1; public static final int LATITUDE_INDEX = 2; public static final int HIDDEN_INDEX = 3; private String[] columnNames; private Vector<TableRecord> dataVector; public InteractiveTableModel(String[] columnNames) { this.columnNames = columnNames; dataVector = new Vector<TableRecord>(); } public String getColumnName(int column) { return columnNames[column]; } public String[] getColumn(int index) { String[] column = new String[dataVector.size()]; for (int i = 0; i < dataVector.size(); i++) { column[i] = String.valueOf(getValueAt(i, index)); } return column; } public boolean isCellEditable(int row, int column) { if (column == HIDDEN_INDEX) return false; else return true; } public Class<?> getColumnClass(int column) { switch (column) { case LOCATION_INDEX: case LONGITUDE_INDEX: case LATITUDE_INDEX: return String.class; default: return Object.class; } } public Object getValueAt(int row, int column) { TableRecord record = (TableRecord) dataVector.get(row); switch (column) { case LOCATION_INDEX: return record.getLocation(); case LONGITUDE_INDEX: return record.getLongitude(); case LATITUDE_INDEX: return record.getLatitude(); default: return new Object(); } } public void setValueAt(Object value, int row, int column) { TableRecord record = (TableRecord) dataVector.get(row); switch (column) { case LOCATION_INDEX: record.setLocation((String) value); break; case LONGITUDE_INDEX: record.setLongitude((String) value); break; case LATITUDE_INDEX: record.setLatitude((String) value); break; default: System.out.println("invalid index"); } fireTableCellUpdated(row, column); } public void printTable() { for (int i = 0; i < this.getRowCount(); i++) { for (int j = 0; j < this.getColumnCount() - 1; j++) { System.out.print(this.getValueAt(i, j) + "\t"); } System.out.println(); } } public int getRowCount() { return dataVector.size(); } public int getColumnCount() { return columnNames.length; } // This appends a row public void addRow(TableRecord row) { dataVector.add(row); this.fireTableDataChanged(); } // This inserts a row at specified index public void insertRow(int index, TableRecord row) { dataVector.add(index, row); this.fireTableDataChanged(); } public void deleteRow(int row) { dataVector.remove(row); this.fireTableDataChanged(); } public void cleanTable() { // dataVector.clear(); for (int i = 0; i < dataVector.size(); i++) { deleteRow(i); } } public boolean hasEmptyRow() { if (dataVector.size() == 0) return false; TableRecord tableRecord = (TableRecord) dataVector.get(dataVector .size() - 1); if (tableRecord.getLocation().trim().equals("") && tableRecord.getLongitude().trim().equals("") && tableRecord.getLatitude().trim().equals("")) { return true; } else return false; } public void addEmptyRow() { dataVector.add(new TableRecord()); fireTableRowsInserted(dataVector.size() - 1, dataVector.size() - 1); } }