2015-10-21 2 views
1

J'essaie de déclencher une touche de retour arrière sur un clavier virtuel pour un système tactile. c'est mon code que j'ai essayé jusqu'ici.JavaFX8 KeyEvent - Trigger Backspace Key sur un TextField

Button source = new Button("Backspace"); 
TextField target = new TextField(); 
KeyEvent ke = new KeyEvent(source, target, KeyEvent.KEY_TYPED, "", "", KeyCode.BACK_SPACE, false, false, false, false); 
target.fireEvent(ke); 

ce code est de retour ... rien

+0

Pourquoi ne pas le faire [ 'target.deletePreviousChar()'] (http://docs.oracle.com/javase/8/javafx/api/javafx/ scene/control/TextInputControl.html # deletePreviousChar--)? –

+0

Merci @James_D mais j'ai besoin de savoir qu'il existe un moyen pratique d'utiliser Backspace dans KeyEvent ?? – Hiran

+0

Pourquoi avez-vous besoin de faire cela? –

Répondre

0

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); 
    } 
}