2013-05-30 19 views
8

Ich möchte, dass mein JavaFX-Programm auf Tastaturereignisse reagiert.
Ich habe versucht, Listener zu Root Pane, nach oben Pane hinzufügen, aber es reagiert nicht auf Ereignisse!
Hier ist mein Code:Kann in JavaFX nicht auf KeyEvent hören

AnchorPane root = new AnchorPane(); 
    root.setOnKeyPressed(new EventHandler<KeyEvent>() { 

     @Override 
     public void handle(KeyEvent t) { 
      pressKey(t.getCharacter().charAt(0)); 
     } 
    }); 
    root.setOnKeyReleased(new EventHandler<KeyEvent>() { 

     @Override 
     public void handle(KeyEvent t) { 
      releaseKey(t.getCharacter().charAt(0)); 
     } 
    }); 
    root.addEventHandler(EventType.ROOT, new EventHandler<Event>() { 

     @Override 
     public void handle(Event t) { 
      if (t.getClass().equals(KeyEvent.class)) { 
       System.out.println("AAARGH! " + ((KeyEvent)t).getCharacter()); 
      } 
     } 
    }); 

WARUM U NO WORKING, Schlüsselereignisse? Mache ich hier etwas falsch?
Um sicher zu sein, Mausereignisse funktioniert gut mit dem gleichen Code.

+1

Zuhörer auf Szene hinzufügen? –

+0

danke, das funktioniert. – Chechulin

Antwort

11

Eine Lösung besteht darin, der Szene einen Ereignis-Listener hinzuzufügen. Da Layouts standardmäßig keinen Fokus haben, reagieren sie nicht auf KeyEvents. KeyEvents werden zuerst an den fokussierten Knoten übergeben.

Eine andere Lösung ist auf Ihre Scheibe fokussierbar zu machen:

root.setFocusTraversable(true) 
+0

Ich habe ein SplitPane mit einem Knoten hinzugefügt. Hat gut funktioniert. Würde nicht mit einem BorderPane arbeiten, obwohl ich FocusTraversable gesetzt habe (true) ... nicht sicher warum der Unterschied. –

0

auch sicherstellen, dass Sie die richtige KeyEvent importieren wie in

Import javafx.scene.input.KeyEvent;

statt der KeyEvent von AWT

1

((KeyEvent)t).getCharacter() stattdessen ((KeyEvent)e).getText()