The Java Developers Almanac 1.4


Order this book from Amazon.

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

e959. Using a JComboBox in a Cell in a JTable Component

If the possible values allowed in a column must be one from a small fixed set of values, a combobox might be appropriate as the cell editor for that column. By using a combobox, 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 combobox values
    String[] values = new String[]{"item1", "item2", "item3"};
    
    // Set the combobox editor on the 1st visible column
    int vColIndex = 0;
    TableColumn col = table.getColumnModel().getColumn(vColIndex);
    col.setCellEditor(new MyComboBoxEditor(values));
    
    // If the cell should appear like a combobox in its
    // non-editing state, also set the combobox renderer
    col.setCellRenderer(new MyComboBoxRenderer(values));
    
    public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
        public MyComboBoxRenderer(String[] items) {
            super(items);
        }
    
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (isSelected) {
                setForeground(table.getSelectionForeground());
                super.setBackground(table.getSelectionBackground());
            } else {
                setForeground(table.getForeground());
                setBackground(table.getBackground());
            }
    
            // Select the current value
            setSelectedItem(value);
            return this;
        }
    }
    
    public class MyComboBoxEditor extends DefaultCellEditor {
        public MyComboBoxEditor(String[] items) {
            super(new JComboBox(items));
        }
    }

 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
e960. Using a List JSpinner as a Cell Editor in a JTable Component

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


© 2002 Addison-Wesley.