Program: 51971
Project: 51971
Buggy source:
@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;
}

Fixed version (ground truth):
@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();
  final JTable tbl=table;
checkbox.addActionListener(new ActionListener(){
  public void actionPerformed(  ActionEvent event){
    SwingTree.this.table.setValueAt(checkbox.isSelected(),row,column);
    tbl.getCellEditor().stopCellEditing();
  }
}
);
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;
}