BeiJavaFX TextField- OnKeyTyped nicht ordnungsgemäß funktioniert
JavaFX App, Input TextField
und Absenden Button
Es gibt eine EventHandler
an die TextField
angebracht, so dass, wenn kein Text eingegeben wird, sollte die Button
deaktiviert und umge werden versa.
Hier ist mein Code:
button.setDisable(true); // initially disabled
textField.setOnKeyTyped(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (textField.getText().trim().isEmpty()) { // if blank textfield
button.setDisable(true);
} else {
button.setDisable(false);
}
}
});
Beide Steuerungen richtig initialisiert werden. Und soweit ich weiß, besteht der Unterschied zwischen KeyTyped und KeyPressed/Released darin, dass Typed für Zeichen steht, die tatsächlich eingegeben und angezeigt werden können. während Pressed/freigegeben ist für jede Tastaturtaste mit Ctrl, Alt ...
Problem
Ich tippe in die textField
ein Zeichen ist die button
noch deaktiviert! Wenn ich 2 Zeichen und mehr eintippe, wird es aktiviert!
Wenn jedoch, wenn ich wie folgt vorgehen:
button.setDisable(true);
textField.setOnKeyReleased(
/*
exact same code as above
*/
);
mein Problem gelöst werden.
Frage
WARUM? Wo ist der Fehler in meinem Code? Warum funktioniert KeyTyped nicht wie erwartet?
In Ihrem ersten aproach verbindlich, wenn Sie einen 'ChangeListener' wie' (obj, oldVal, newVal) -> {...} 'Sie auch Holen Sie sich den neuen Wert automatisch, ohne auf das 'textField' zurückgreifen zu müssen. Wie auch immer, +1 ... –
in Ordnung.Danke, auch wenn ich immer noch nicht verstehe, warum es bei einem Charakter nicht funktioniert, aber mit mehr Charakteren! –
@ rz3r0 Einfach: Der Text wurde noch nicht im 'TextField' zum Zeitpunkt des Aufrufs von' setOnKeyTyped() 'aktualisiert. Daher lesen Sie immer noch den alten (leeren) Wert. Das Steuerelement aktualisiert dann seinen Text und ruft später 'setOnKeyReleased()' auf - dort ist der neue Wert verfügbar. –