【问题标题】:How to use KeyEvent in JavaFX project?如何在 JavaFX 项目中使用 KeyEvent?
【发布时间】:2015-03-14 23:52:52
【问题描述】:

我已经搜索了很长时间,以寻找如何编写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);  
       } 
    }
}

那么请问有人可以帮帮我吗?

【问题讨论】:

  • 如果这是 JavaFX 中按钮的默认行为,我会感到非常惊讶(和失望)。我认为您需要查看Handling JavaFX EventsUsing JavaFX UI Controls。如果像 button2.setOnAction(new EventHandler<ActionEvent>() { 这样的东西没有像 Swing 那样处理键事件和鼠标事件,我会感到非常惊讶......
  • 好吧,显然 [Enter] 不是默认键...试试 this 之类的东西

标签: java netbeans javafx


【解决方案1】:

您的代码几乎没有问题:

  1. 您使用的是onKeyTyped 而不是onKeyPressed。欲了解更多信息visit this link

  2. 您很可能正在使用java.awt.event.KeyEvent,它不适用于JavaFX events。尝试使用javafx.scene.input.KeyEvent

    之所以得出这个结论,是因为JavaFX不支持KeyEvent.VK_ENTER,而是支持KeyCode.ENTER

下面是一个具体的例子,你可以用同样的例子把它转换成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);
    }
}

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    相关资源
    最近更新 更多