Program: 51989
Project: 51989
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   if (value instanceof Boolean) {
    checkbox.setSelected((Boolean)value);
  }
 else   if (value == null) {
    checkbox.setSelected(false);
  }
if (isSelected) {
  checkbox.setBackground(Color.LIGHT_GRAY);
}
return checkbox;
case COMBOBOX:
Vector val=(value != null) ? (Vector)value : new Vector();
final JComboBox comboBox=new JComboBox(val);
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.getSelectedIndex(),row,column);
}
}
);
if (isSelected) {
comboBox.setBackground(Color.LIGHT_GRAY);
}
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);
}
}
);
if (isSelected) {
label.setOpaque(true);
label.setBackground(Color.LIGHT_GRAY);
}
control=label;
return label;
}
}
@Override public Object getCellEditorValue(){
if (control instanceof JCheckBox) {
return ((JCheckBox)control).isSelected();
}
 else if (control instanceof JComboBox) {
return ((JComboBox)control).getSelectedIndex();
}
 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){
      Component comp;
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);
  }
if (isSelected) {
  checkbox.setBackground(Color.LIGHT_GRAY);
}
comp=checkbox;
break;
case COMBOBOX:
Vector val=(value != null) ? (Vector)value : new Vector();
final JComboBox comboBox=new JComboBox(val);
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.getSelectedIndex(),row,column);
}
}
);
if (isSelected) {
comboBox.setBackground(Color.LIGHT_GRAY);
}
control=comboBox;
comp=comboBox;
break;
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);
}
}
);
if (isSelected) {
label.setOpaque(true);
label.setBackground(Color.LIGHT_GRAY);
}
control=label;
comp=label;
break;
}
return comp;
}
@Override public Object getCellEditorValue(){
if (control instanceof JCheckBox) {
return ((JCheckBox)control).isSelected();
}
 else if (control instanceof JComboBox) {
return ((JComboBox)control).getSelectedIndex();
}
 else {
return ((JTextField)control).getText();
}
}
}
;
}