2016-05-15 16 views
1

Ich habe ein sehr einfach KeyEvent:KeyEvent zu stoppen JavaFX Zuhören

@Override 
public void start(Stage stage) throws Exception { 
    Group root = new Group(); 
    Scene scene = new Scene(root); 
    Canvas canvas = new Canvas(900, 700); 

    scene.setOnKeyPressed(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent ke) { 

      switch (ke.getCode()) { 
       case UP: 
        System.out.println("UP"); 
        break; 
       case DOWN: 
        System.out.println("DOWN"); 
        break; 
       case LEFT: 
        System.out.println("LEFT"); 
        break; 
       case RIGHT: 
        System.out.println("RIGHT"); 
        break; 
       case ENTER: 
        //ke.consume(); 
        break; 
       default: 
        break; 
      } 
     }}); 

Was Ich mag zu erreichen: ich starten Sie das Programm laufen zu lassen und wenn ich die oben drücken, unten, links, rechts die Ausgabe schreiben zurück zu mir AUF, AB, LINKS, RECHTS (Es ist richtig, kein Problem). Aber! Wenn ich die Eingabetaste drücke, nach Wenn ich die Aufwärts-, Abwärts-, Links-, Rechts-, Enter- oder eine andere Taste drücke, schreibe nicht die Ausgabe UP, DOWN, LEFT, RIGHT zurück.

Ich möchte also verhindern, dass das KeyEvent "läuft", wenn ich die ENTER-Taste drücke.

Antwort

1

Sie haben mehrere Möglichkeiten, diese zwei kamen zwei meiner Meinung nach zuerst.

1) Speichern Sie den Listener Ihres Schlüsselereignisses als Mitglied Ihrer Klasse, und drücken Sie bei der EINGABE-Taste die Abmeldung.

private EventHandler<KeyEvent> keyHandler; 


@Override 
public void start(Stage stage) { 
    final Scene scene = new Scene(new Group()); 
    stage.setTitle("Table View Sample"); 
    stage.setWidth(450); 
    stage.setHeight(500); 

    keyHandler = new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent ke) { 

      switch (ke.getCode()) { 
       case ENTER: 
        scene.removeEventHandler(KeyEvent.KEY_PRESSED, keyHandler); 
        break; 
       case UP: 
        System.out.println("UP"); 
        break; 
       case DOWN: 
        System.out.println("DOWN"); 
        break; 
       case LEFT: 
        System.out.println("LEFT"); 
        break; 
       case RIGHT: 
        System.out.println("RIGHT"); 
        break; 


       default: 
        break; 
      } 
     }}; 

    scane.addEventHandler(KeyEvent.KEY_PRESSED, keyHandler); 

2) Auf ENTER drücken, speichern Sie eine boolean an ein Mitglied, und wenn dieses Element gesetzt ist, verbrauchen die Veranstaltung.

private Boolean enterPressed = false; 

@Override 
public void start(Stage stage) { 
    final Scene scene = new Scene(new Group()); 
    stage.setTitle("Table View Sample"); 
    stage.setWidth(450); 
    stage.setHeight(500); 

    scene.setOnKeyPressed(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent ke) { 

      if(enterPressed){ 
       ke.consume(); 
       return; 
      } 

      switch (ke.getCode()) { 
       case ENTER: 
        enterPressed = true; 
        break; 
       case UP: 
        System.out.println("UP"); 
        break; 
       case DOWN: 
        System.out.println("DOWN"); 
        break; 
       case LEFT: 
        System.out.println("LEFT"); 
        break; 
       case RIGHT: 
        System.out.println("RIGHT"); 
        break; 

       default: 
        break; 
      } 
     }}); 

Beide arbeiten, wählen Sie, was auch immer Sie mögen.

+0

Vielen Dank! Ich habe meinen Tag gerettet – Dreamfire