Das Problem ist (oder scheint zu sein) : Wenn man die Liste filtert, indem man ein neues Filter-Prädikat setzt, dann wird das interne Selection-Model darüber benachrichtigt, dass „nichts“ mehr ausgewählt ist - und DAS (also nichts) wird dann im Editor angezeigt. Blrgmls… da gibt es ziemlich viele Kreuz-Und-Quer-Abhängigkeiten. Wie immer, wenn ein Programm/Library/Computer versucht, einem das Leben leichter zu machen: Es funktioniert fast immer, aber wenn mal nicht, macht es einem das Leben so viel schwerer, dass man sich manchmal von Anfang an die schwerere Variante gewünscht hätte.
Mit dem hier schien es zwar jetzt zu „“„funktionieren“"", aber das ist ein übler Krampf, und DARF einfach nicht die einzige/richtige Lösung sein
prim.getEditor().textProperty().addListener(new ChangeListener<String>()
{
boolean clearing = false;
boolean forcing = false;
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue)
{
TextField editor = prim.getEditor();
String selected = prim.getSelectionModel().getSelectedItem();
if (forcing)
{
return;
}
if (clearing)
{
forcing = true;
prim.getEditor().setText(oldValue);
forcing = false;
return;
}
Platform.runLater(() -> {
if (selected == null || !selected.equals(editor.getText()))
{
clearing = true;
filteredItems.setPredicate(item -> {
return item.toUpperCase().startsWith(
newValue.toUpperCase());
});
clearing = false;
}
prim.getEditor().positionCaret(newValue.length());
});
}
});
Hoffentlich postet bald jemand was besseres