The Java Developers Almanac 1.4


Order this book from Amazon.

   
Home > List of Packages > javax.swing.table  [62 examples] > Editing  [8 examples]

e960. 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();
        }
    }

 Related Examples
e953. Creating a Custom Table Cell Editor in a JTable Component
e954. Preventing Invalid Values in a Cell in a JTable Component
e955. Setting the Activation Click Count for a Table Cell Editor in a JTable Component
e956. Programmatically Starting and Stopping Cell Editing in a JTable Component
e957. Creating a Text Field That Mirrors the Value in the Anchor Cell in a JTable Component
e958. Disabling User Edits in a JTable Component
e959. Using a JComboBox in a Cell in a JTable Component

See also: Cells    Column Heads    Columns    Events    Layout    Rows    Scrolling    Selection    Sorting    Table Model    Tool Tips   


© 2002 Addison-Wesley.