ich habe in JavaFX eine ComboBox mit einer FilteredList kompiniert, so dass das Popup der ComboBox aufgrund der Eingabe in den Editor der Combobox angepasst wird.
Wenn ich aus der ComboBox mit der Maus einen Text selektiert habe, dann im Editor diesen markiere und dann eine Tastatureingabe machen will, geht der erste Tastendruck “quasi” ins Leere.
Hat jemand von den Profis eine Idee, wie ich den markierten Text gleich mit dem ersten Tastendruck ersetzen kann?
Hier mein Beispiel mit zwei ComboBoxen. Die Linke hat den Filter, die recht ist hat keinen Filter (ich habe die Datei auch als Txt hochgeladen.
Bis einer von den Profis antwortet (zu denen gehöre ich bestenfalls bei Swing, aber nicht bei JavaFX) nur das hier, wo ich mit etwas rumprobieren gelandet bin:
prim.getEditor().textProperty().addListener((obs, oldValue, newValue) -> {
final TextField editor = prim.getEditor();
final String selected = prim.getSelectionModel().getSelectedItem();
System.out.println("Changed from "+oldValue+" to "+newValue);
Platform.runLater(() ->
{
if (newValue.isEmpty())
{
editor.setText(oldValue);
return;
}
if (selected == null || !selected.equals(editor.getText())) {
filteredItems.setPredicate(item -> {
return item.toUpperCase().startsWith(newValue.toUpperCase());
});
}
});
});
Aaaaber: Eine wichtige Frage ist IMHO, unter welchen Bedingungen der Filter zurückgesetzt werden soll. Wenn man z.B. "T" eintippt und dann “Three” auswählt, kann man bei einem weiteren Ausklappen immernoch “Two” und “Three” auswählen - ist das so gedacht?
danke…aber dein Vorschlag verhält sich genau wie meiner.
Interessant ist, dass sich das letzte Zeichen nicht mehr aus dem Editor der Combo rauslöschen lässt.
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
Ohje, ich hab’ jetzt echt schon ein schlechtes Gewissen, dafür, dass sowas evtl. tatsächlich in irgendeiner Codebasis landet. Bitte nicht meinen Namen dazuschreiben Im Ernst: Da muss es etwas besseres geben. Ich muss wohl irgendwann mal ähnlich durch JavaFX browsen, wie ich das bei Swing schon Jahrelang gemacht habe (aber Swing scheint in der Hinsicht seeeehr viel zugänglicher zu sein … )