I want to create a Cell factory that returns a TableCell that behaves exactly like TextFieldTableCell, with the following difference: When it loses focus, it commits the changes.
My code is very simple:
public final class TextFieldCellFactory<S, T> implements Callback<TableColumn<S, T>, TableCell<S, T>> {
    @Override
    public TableCell<S, T> call(TableColumn<S, T> p) {
        class EditingCell extends TextFieldTableCell {
            public EditingCell() {
                super();
                setConverter(new DefaultStringConverter());
                focusedProperty().addListener(new ChangeListener() {
                    @Override
                    public void changed(ObservableValue observable, Object oldValue, Object newValue) {
                        System.out.println("changed!");
                        System.out.println("getText() = " + getText());
                        System.out.println("textProperty() = " + textProperty().get());
                        System.out.println("getItem = " + getItem());
                    }
                });
            }
            @Override
            public void startEdit() {
                super.startEdit();
            }
            @Override
            public void cancelEdit() {
                super.cancelEdit();
            }
        }
        return new EditingCell();
    }
}
As you see I add a change listener in the focusedProperty. The problem is that the change method is not called (nothing is printed).
How can I get the desired behaviour? Thank you.