如何在JavaFX项目中使用KeyEvent?

时间:2015-01-16 11:22:10

标签: java netbeans javafx

我已经搜索了很长时间,如何编写KeyEvent以允许ENTER key按下我的按钮。请注意,我正在使用JavaFX和FXML文件。

问题是,当在FXML文件的onKeyTyped文本字段中设置时,FXML文件不接受它。它说Handle method not found。它只接受ActionEvent方法,所以我尝试了这段代码:

 @FXML
 private void key (KeyEvent evt) throws IOException{ 
       if (evt.getCode() == KeyEvent.VK_ENTER){
       String az = text1.getText();
       //c.1
       if(az.contains("1")){ 
          String hh = text11.getText();
          Socket socket = null;
          InetSocketAddress isa = new InetSocketAddress (hh,80);  
       } 
    }
}

那么请有人帮助我吗?

1 个答案:

答案 0 :(得分:6)

您的代码几乎没有问题:

  1. 您使用onKeyTyped代替onKeyPressed。有关详细信息visit this link

  2. 您最有可能使用java.awt.event.KeyEvent,这不适用于JavaFX events。尝试使用javafx.scene.input.KeyEvent

    我得出这个结论的原因是因为JavaFX不支持KeyEvent.VK_ENTER而是KeyCode.ENTER

  3. 下面显示了一个具体示例,您可以使用相同的方法将其转换为FXML:

    import javafx.application.Application;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.input.KeyCode;
    import javafx.scene.input.KeyEvent;
    import javafx.scene.layout.BorderPane;
    import javafx.stage.Stage;
    
    public class ButtonExample extends Application {
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            BorderPane pane = new BorderPane();
            Button button = new Button("Press Me!");
            pane.setCenter(button);
            Scene scene = new Scene(pane, 200, 200);
            primaryStage.setScene(scene);
            primaryStage.show();
    
            button.setOnKeyPressed(new EventHandler<KeyEvent>() {
    
                @Override
                public void handle(KeyEvent event) {
                    if (event.getCode() == KeyCode.ENTER) {
                        System.out.println("Enter Pressed");
                    }
                }
            });
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }