JavaFx Editable ComboBox: Zeigt toString bei der Elementauswahl an

Ich habe einComboBox<Perosn> vom TypPerson , in dem ich einige objekte von hinzugefügt habePerson Klasse,

Ich habe benutztsetCellFactory(Callback) Methode zum Anzeigen des Personennamens in der Dropdown-Liste ComboBox

combobox.setCellFactory(
    new Callback<ListView<Person >, ListCell<Person >>() {
        @Override
        public ListCell<Person > call(ListView<Person > p) {
            ListCell cell = new ListCell<Person >() {
                @Override
                protected void updateItem(Person item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setText("");
                    } else {
                        setText(item.getName());
                    }
                }
            };
            return cell;
        }
    });

Und,setButtonCell(ListCell) Methode zum Anzeigen des Namens incombobox bei der Auswahl.

combobox.setButtonCell(
    new ListCell<Object>() {
        @Override
        protected void updateItem(Person t, boolean bln) {
            super.updateItem(t, bln); 
            if (bln) {
                setText("");
            } else {
                setText(t.getName());
            }
        }
    });

Dies funktioniert im Normalfall einwandfrei, aber wenn ich eine bearbeitbare Combobox verwende, schlägt dies fehl.

Wenn ich schreibe,combobox.setEditable(true); dann wird bei der Itemauswahl das Textfeld (Editor) der Combobox angezeigttoString() Methode der Personenklasse.

Normalfall:

Bearbeitbarer Fall:

Gibt es eine Lösung dafür?

Ich habe eine Modellklasse,

public class Person {
    String name;
    int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" + "name=" + name + ", age=" + age + '}';
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage