2016-04-20 12 views
1

Ich bin neu in Java und Java FX und ich versuche, ein Panel mit Schaltflächen mit Szene-Builder zu machen. Ich möchte, dass meine Anwendung nur bei gedrückter Pfeiltaste antwortet. Ich habe die folgende Methode in meiner Controller Klasse:Java FX Scene Builder Wie man Event-Taste gedrückt

public void keyPressed(KeyEvent key) { 
    switch(key.getCode()) { 
     ...some code here 
    } 
} 

Danach habe ich diese Methode in Szene Builder ausgewählt, aber wenn ich meine Anwendung ausführen nichts passiert, wenn ich eine Pfeiltaste drücken. Kann mir jemand helfen?

Antwort

0

KeyCode eine Methode hat isArrowKey(), also, wenn Sie Ihre keyPressed Methode von Ihrem Event-Handler aufrufen, könnten Sie tun:

public void keyPressed(KeyEvent key){ 
    if(key.getCode().isArrowKey()){ 
     ...some code here 
    } 
} 

Wenn Sie verschiedene Dinge tun müssen, um basierend auf dem Pfeiltaste gedrückt wird, Stellen Sie sicher, dass Ihre Schaltergehäuse mit KeyCode.UP/DOWN/LEFT/RIGHT übereinstimmen. Wenn dies der Fall ist, ist es wahrscheinlich, dass Sie entweder den Event-Handler nicht richtig gesetzt haben oder Ihre GUI aufgrund eines Threading-Problems hängen geblieben ist. Veröffentlichen Sie, wo Sie das Ereignis behandeln, wenn Sie weitere Hilfe benötigen.

1

Ohne den Rest des Codes zu sehen und FXML es schwierig ist, hier zu sagen, ist voll Beispiel

Mögliche Dinge, die Sie

verpasst
  • keyPress als Aktion in der FXML Hinzufügen
  • Hinzufügen der @FXML Anmerkung zur keyPressed() Methode

-Code

public class Main extends Application { 

    private class Controller { 
     @FXML // <== perhaps you had this missing?? 
     void keyPressed(KeyEvent event) { 
      switch (event.getCode()) { 
      case LEFT: 
      case KP_LEFT: 
       System.out.println("to the left"); 
       break; 
      case RIGHT: 
      case KP_RIGHT: 
       System.out.println("to the right"); 
       break; 
      default: 
       break; 
      } 
     } 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("/foo.fxml")); 
     loader.setController(new Controller()); 
     primaryStage.setScene(new Scene(loader.load())); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

FXML

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.layout.ColumnConstraints?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.layout.RowConstraints?> 

<GridPane onKeyPressed="#keyPressed" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"> 
    <columnConstraints> 
     <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" /> 
    </columnConstraints> 
    <rowConstraints> 
     <RowConstraints minHeight="10.0" vgrow="SOMETIMES" /> 
    </rowConstraints> 
    <children> 
     <Button mnemonicParsing="false" text="Button" /> 
    </children> 
</GridPane> 
Verwandte Themen