Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Boolean JComboBox

843806Jan 8 2008 — edited Jan 11 2008
Hi!



I have a table with two rows the left uneditable and the right editable.

The right side render different values for each row-cell so the content of the cells differs between ints,strings booleans and so forth.

Here comes my problem. I want my boolean values to be rendered as a JComboBox instead of the default checkbox.

I have written a renderer and editor for this purpose which works to a certain extent. When you first enter the application the cell is rendered correct(JComboBox) but as you try to edit the field it re-renders it to a String. Anyone who could help me? Because i am stuck and can't seem to get myself out of this little hole i dug for myself.

First i override the DefaultTableModel with the following changes:
String values[] = {"true","false"};

public TableCellRenderer getCellRenderer(int row, int column) {
        editingClass = null;
        int modelColumn = convertColumnIndexToModel(column);
        System.out.println("getCellRenderer");
        if (modelColumn == 1) {
            if (getModel().getValueAt(row, modelColumn) == null) {
                System.out.println("null at cellRenderer");
                System.out.println(row + " : " + column);
            }

            Class rowClass = getModel().getValueAt(row, modelColumn).getClass();
            if (getModel().getValueAt(row, modelColumn) instanceof Number) {
                return new NumberRenderer();
            } else if (getModel().getValueAt(row, modelColumn) instanceof String) {
                DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
                renderer.setHorizontalAlignment(JLabel.RIGHT);
                return renderer;
            }else if (getModel().getValueAt(row, modelColumn) instanceof Boolean) {
                return new BolRenderer(values);
            }

            return getDefaultRenderer(rowClass);
        } else {
            return super.getCellRenderer(row, column);
        }
    }

    public TableCellEditor getCellEditor(int row, int column) {
        editingClass = null;
        int modelColumn = convertColumnIndexToModel(column);
        System.out.println("getCellEditor");
        if (modelColumn == 1) {       
            
            if(getModel().getValueAt(row, modelColumn) instanceof Boolean)
                return new BolEditor(values);
            else
                editingClass = getModel().getValueAt(row, modelColumn).getClass();
            
            return getDefaultEditor(editingClass);
        } else {
            return super.getCellEditor(row, column);
        }
    }


    public Class getColumnClass(int column) {
        System.out.println("getColumnClass");
        return editingClass != null ? editingClass : super.getColumnClass(column);
    }
The Boleditor
public class BolEditor extends DefaultCellEditor{
        public BolEditor(String[] items) {
            super(new JComboBox(items));
        }
}
BolRenderer
public class BolRenderer extends JComboBox implements TableCellRenderer {
    
     public BolRenderer(String[] values){
        super(values);
    }
        
    public Component getTableCellRendererComponent(JTable table, Object value,
                                                    boolean isSelected,
                                                    boolean hasFocus,
                                                    int row, int column) {
        if(Boolean.TRUE.equals(value)){
            /*this.setSelectedItem(value);
              this.setSelectedIndex(0);
             */
        }else{
            /*
             this.setSelectedItem(value);
             this.setSelectedIndex(1);
             */
        }

        return this;
    }
}
As I see it, it's my inability to write a proper renderer and editor which is the real problem so if someone could help me it would be really great! Thanks!
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Feb 8 2008
Added on Jan 8 2008
13 comments
336 views