Using a List JSpinner as a Cell Editor in a JTable Component
If the possible values allowed in a column must be from a small
fixed set of values, a spinner might be appropriate as the cell editor
for that column. By using a list spinner, it is impossible for the
user to input an invalid value.
JTable table = new JTable();
DefaultTableModel model = (DefaultTableModel)table.getModel();
// Add some columns
model.addColumn("A", new Object[]{"item1"});
model.addColumn("B", new Object[]{"item2"});
// These are the spinner values
String[] values = new String[]{"item1", "item2", "item3"};
// Set the spinner editor on the 1st visible column
int vColIndex = 0;
TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new SpinnerEditor(values));
// If you want to make the cell appear like a spinner in its
// non-editing state, also set the spinner renderer
col.setCellRenderer(new SpinnerRenderer(values));
public class SpinnerEditor extends AbstractCellEditor
implements TableCellEditor {
final JSpinner spinner = new JSpinner();
// Initializes the spinner.
public SpinnerEditor(String[] items) {
spinner.setModel(new SpinnerListModel(java.util.Arrays.asList(items)));
}
// Prepares the spinner component and returns it.
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
spinner.setValue(value);
return spinner;
}
// Enables the editor only for double-clicks.
public boolean isCellEditable(EventObject evt) {
if (evt instanceof MouseEvent) {
return ((MouseEvent)evt).getClickCount() >= 2;
}
return true;
}
// Returns the spinners current value.
public Object getCellEditorValue() {
return spinner.getValue();
}
}
Post a comment