Probleme mit CellEditor

TMDolphin

Grünschnabel
Hallo,
habe ein Problem mit einem selbstgeschriebenem CellEditor. Sobald ich die Zelle aktiviere, kommt die ComboBox wie gewollt, auch die Elemente sind korrekt.
verändere ich nun den Wert bleibt die ComboBox (!) im Feld, also wird das editing nicht gestoppt, aber mit dem alten Wert, statt mit dem, der neu ausgewählt wurde.
Mit Enter oder so wird das CellEditing dann gestoppt und der ausgewählte (leider ja nicht veränderbare) Wert wird korrekt in das entsprechende Feld gesetzt.
Habe einen ähnlichen CellEditor mit festen Integer-Werten, der funktioniert....

Weiß derzeit keinen Rat, suche ergab ähnliche Probleme, aber keine bei mir funktionierenden Lösungen....

Vielen Dank schonmal im Voraus

hier noch die Klasse:

Code:
package StreetEditor.TableModels;

import java.awt.Component;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import java.util.Vector;

import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;

import org.apache.log4j.Logger;

import Gameplay.StreetCollection;

public class CollectionEditor extends JComboBox implements TableCellEditor {
    private static Logger log = Logger.getLogger(CollectionEditor.class);
    
    private Vector<CellEditorListener> listeners = new Vector<CellEditorListener>();
    private TableModelStreetCollection streetCollections = new TableModelStreetCollection();
    
    public CollectionEditor(TableModelStreetCollection aStreetCollectionModel) {
        streetCollections = aStreetCollectionModel;
        renderComboBox();
    }
    
    private void renderComboBox() {
        log.debug("renderBox");
        removeAllItems();
        validate();
        for (StreetCollection collection : streetCollections.getVector()) {
            addItem(collection);
        }
        validate();
    }

    @Override
    public Component getTableCellEditorComponent(JTable anArg0, Object value,
            boolean anArg2, int anArg3, int anArg4) {
        renderComboBox();
        log.debug("getTableCellEditorComponent");
        if (value instanceof StreetCollection){
            setSelectedItem((StreetCollection)value);
        }
        return this;
    }

    @Override
    public Object getCellEditorValue() {
        log.debug("");
        return getSelectedItem();
    }

    @Override
    public void addCellEditorListener(CellEditorListener anL) {
        listeners.add(anL);
        
    }

    @Override
    public boolean isCellEditable(EventObject anEvent) {
        if( anEvent instanceof MouseEvent ) 
            return ((MouseEvent)anEvent).getClickCount() > 1; 
        return true; 
    }

    @Override
    public void removeCellEditorListener(CellEditorListener listener) {
        listeners.remove(listener);
    }

    @Override
    public boolean shouldSelectCell(EventObject anArg0) {
        return true;
    }

    @Override
    public boolean stopCellEditing() {
        ChangeEvent event = new ChangeEvent( this ); 
        for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] )) 
            listener.editingStopped( event ); 
       
        return true; 
    }
    
    @Override
    public void cancelCellEditing() {
        ChangeEvent event = new ChangeEvent( this ); 
        for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] )) 
            listener.editingCanceled( event ); 
    }
}
 
Zurück