package mapmaker;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class EditableList extends JTable
{
EditableListModel listModel = new EditableListModel();
public EditableList()
{
setModel(listModel);
setTableHeader(null);
// Commit changes when focus is lost.
addFocusListener(new FocusAdapter()
{
public void focusLost(FocusEvent e)
{
int row = getSelectedRow();
if (row == -1)
{
return;
}
int col = getSelectedColumn();
DefaultCellEditor editor = (DefaultCellEditor)getCellEditor(row, 0);
JTextField field = (JTextField)editor.getComponent();
String value = field.getText();
if (value == null || value.compareTo("") == 0)
{
return;
}
editor.stopCellEditing();
}
});
}
public Vector getListItems()
{
return listModel.getData();
}
public void setListItems(Vector aItems)
{
listModel.setData(aItems);
}
}
class EditableListModel extends AbstractTableModel
{
static String NEW_ITEM = "";
Vector data = new Vector();
public EditableListModel()
{
data.addElement(NEW_ITEM);
}
public int getColumnCount()
{
return 1;
}
public Class getColumnClass(int aCol)
{
return String.class;
}
public Object getValueAt(int aRow, int aCol)
{
return data.elementAt(aRow);
}
public void setValueAt(Object aValue, int aRow, int aCol)
{
String oldItem = (String)data.elementAt(aRow);
String newItem = (String)aValue;
if (oldItem.compareTo(NEW_ITEM) == 0 && newItem.compareTo(NEW_ITEM) != 0)
{
data.addElement(NEW_ITEM);
fireTableRowsInserted(aRow + 1, aRow + 1);
}
else if (oldItem.compareTo(NEW_ITEM) != 0 && newItem.compareTo(NEW_ITEM) == 0)
{
data.removeElementAt(aRow);
fireTableRowsDeleted(aRow, aRow);
return;
}
data.setElementAt(aValue, aRow);
fireTableCellUpdated(aRow, aCol);
}
public boolean isCellEditable(int aRow, int aCol)
{
return true;
}
public int getRowCount()
{
return data.size();
}
public void setData(Vector aData)
{
data = aData;
fireTableDataChanged();
}
public Vector getData()
{
return data;
}
}