Program: 52038
Project: 52038
Buggy source:
private TableCellEditor getCellEditor(final SwingTreeCol col){
  return new DefaultCellEditor(new JComboBox()){
    JComponent control;
    @Override public Component getTableCellEditorComponent(    JTable table,    Object value,    boolean isSelected,    final int row,    final int column){
switch (col.getColumnType()) {
case CHECKBOX:
        final JCheckBox checkbox=new JCheckBox();
      checkbox.addActionListener(new ActionListener(){
        public void actionPerformed(        ActionEvent event){
          SwingTree.this.table.setValueAt(checkbox.isSelected(),row,column);
        }
      }
);
    control=checkbox;
  if (value instanceof String) {
    checkbox.setSelected(((String)value).equalsIgnoreCase("String_Node_Str"));
  }
 else {
    checkbox.setSelected((Boolean)value);
  }
return checkbox;
case COMBOBOX:
final JComboBox comboBox=new JComboBox((Vector)value);
comboBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
SwingTree.logger.debug("String_Node_Str" + comboBox.getSelectedItem() + "String_Node_Str"+ row+ "String_Node_Str"+ column);
SwingTree.this.table.setValueAt(comboBox.getSelectedItem(),row,column);
}
}
);
control=comboBox;
return comboBox;
default :
final JTextField label=new JTextField((String)value);
label.getDocument().addDocumentListener(new DocumentListener(){
public void changedUpdate(DocumentEvent arg0){
SwingTree.this.table.setValueAt(label.getText(),row,column);
}
public void insertUpdate(DocumentEvent arg0){
SwingTree.this.table.setValueAt(label.getText(),row,column);
}
public void removeUpdate(DocumentEvent arg0){
SwingTree.this.table.setValueAt(label.getText(),row,column);
}
}
);
control=label;
return label;
}
}
@Override public Object getCellEditorValue(){
if (control instanceof JCheckBox) {
return ((JCheckBox)control).isSelected();
}
 else if (control instanceof JComboBox) {
return ((JComboBox)control).getSelectedItem();
}
 else {
return ((JTextField)control).getText();
}
}
}
;
}

Fixed version (ground truth):
private TableCellEditor getCellEditor(final SwingTreeCol col){
  return new DefaultCellEditor(new JComboBox()){
    JComponent control;
    @Override public Component getTableCellEditorComponent(    JTable table,    Object value,    boolean isSelected,    final int row,    final int column){
switch (col.getColumnType()) {
case CHECKBOX:
        final JCheckBox checkbox=new JCheckBox();
      checkbox.addActionListener(new ActionListener(){
        public void actionPerformed(        ActionEvent event){
          SwingTree.this.table.setValueAt(checkbox.isSelected(),row,column);
        }
      }
);
    control=checkbox;
  if (value instanceof String) {
    checkbox.setSelected(((String)value).equalsIgnoreCase("String_Node_Str"));
  }
 else   if (value instanceof Boolean) {
    checkbox.setSelected((Boolean)value);
  }
 else   if (value == null) {
    checkbox.setSelected(false);
  }
return checkbox;
case COMBOBOX:
final JComboBox comboBox=new JComboBox((Vector)value);
comboBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
SwingTree.logger.debug("String_Node_Str" + comboBox.getSelectedItem() + "String_Node_Str"+ row+ "String_Node_Str"+ column);
SwingTree.this.table.setValueAt(comboBox.getSelectedItem(),row,column);
}
}
);
control=comboBox;
return comboBox;
default :
final JTextField label=new JTextField((String)value);
label.getDocument().addDocumentListener(new DocumentListener(){
public void changedUpdate(DocumentEvent arg0){
SwingTree.this.table.setValueAt(label.getText(),row,column);
}
public void insertUpdate(DocumentEvent arg0){
SwingTree.this.table.setValueAt(label.getText(),row,column);
}
public void removeUpdate(DocumentEvent arg0){
SwingTree.this.table.setValueAt(label.getText(),row,column);
}
}
);
control=label;
return label;
}
}
@Override public Object getCellEditorValue(){
if (control instanceof JCheckBox) {
return ((JCheckBox)control).isSelected();
}
 else if (control instanceof JComboBox) {
return ((JComboBox)control).getSelectedItem();
}
 else {
return ((JTextField)control).getText();
}
}
}
;
}