Vous pouvez directement faire le TextField
comme si se comportent sur la touche backspace a été pressé en appelant target.deletePreviousChar()
, ce qui est probablement une approche beaucoup mieux.
Pour mimer la réelle pression sur la touche Backspace , vous devez les modifications suivantes:
- Le champ texte réagit à
KEY_PRESSED
événements, non KEY_TYPED
événements. Il est probablement préférable de générer toute la séquence d'événements qui se produisent lorsque vous tapez une clé: KEY_PRESSED
, KEY_TYPED
et KEY_RELEASED
.
- Le champ de texte doit avoir le focus. Vous pouvez empêcher le bouton d'obtenir le focus avec
source.setFocusTraversable(false)
.
- Les événements
KeyCode
pour KEY_TYPED
doivent être UNDEFINED
(voir document).
Voici un SSCCE:
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TriggerBackspaceOnTextField extends Application {
@Override
public void start(Stage primaryStage) {
TextField textField = new TextField();
Button backspace = new Button("Backspace");
backspace.setFocusTraversable(false);
backspace.setOnAction(e -> {
KeyEvent press = new KeyEvent(backspace, textField, KeyEvent.KEY_PRESSED, "", "", KeyCode.BACK_SPACE, false, false, false, false);
textField.fireEvent(press);
KeyEvent typed = new KeyEvent(backspace, textField, KeyEvent.KEY_TYPED, "", "", KeyCode.UNDEFINED, false, false, false, false);
textField.fireEvent(typed);
KeyEvent release = new KeyEvent(backspace, textField, KeyEvent.KEY_RELEASED, "", "", KeyCode.BACK_SPACE, false, false, false, false);
textField.fireEvent(release);
});
VBox root = new VBox(10, textField, backspace);
root.setAlignment(Pos.CENTER);
Scene scene = new Scene(root, 350, 200);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Pourquoi ne pas le faire [ 'target.deletePreviousChar()'] (http://docs.oracle.com/javase/8/javafx/api/javafx/ scene/control/TextInputControl.html # deletePreviousChar--)? –
Merci @James_D mais j'ai besoin de savoir qu'il existe un moyen pratique d'utiliser Backspace dans KeyEvent ?? – Hiran
Pourquoi avez-vous besoin de faire cela? –