📜  javafx 操作事件输入键 - Java (1)

📅  最后修改于: 2023-12-03 15:01:36.307000             🧑  作者: Mango

JavaFX 操作事件输入键

在 JavaFX 中,你可以轻松地操作用户输入的键盘事件。这使得你可以根据用户的按键行为来实现不同的操作。本文将介绍如何在 JavaFX 中操作键盘事件。

注册键盘事件处理器

首先,你需要将键盘事件处理器注册到需要检测键盘事件的场景中。在下面的代码块中,我们将 scene 注册为包含键盘事件处理器的场景。

scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        //处理键盘按下事件
    }
});

scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        //处理键盘键入事件
    }
});

scene.setOnKeyReleased(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        //处理键盘释放事件
    }
});

代码中的三个 setOnXXX 方法用于注册按键按下,键入和释放事件处理器。它们接收一个 EventHandler<KeyEvent> 对象作为参数,该对象包含了处理键盘事件的代码。

handle 方法中,你可以编写处理键盘事件的逻辑。比如,下面的代码捕捉了当用户按下 ESC 键时所触发的键盘按下事件,并关闭了当前的场景(窗口)。

scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        if (event.getCode() == KeyCode.ESCAPE) {
            ((Stage) scene.getWindow()).close();
        }
    }
});
捕获键盘按键

handle 方法中,你可以通过 event.getCode() 方法来捕获当前按下的键盘按键。该方法返回一个 KeyCode 枚举值,表示当前按下的键盘按键的类型。例如,下面的代码段检测用户是否按下了上箭头键。

scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        if (event.getCode() == KeyCode.UP) {
            //处理上箭头键按下事件
        }
    }
});

另外,你还可以捕获多个按键同时被按下的情况。例如,下面的代码段检测用户是否同时按下了 CtrlS 键。

scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        if (event.isControlDown() && event.getCode() == KeyCode.S) {
            //处理同时按下 Ctrl 和 S 的情况
        }
    }
});
完整示例代码
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class KeyPressEventDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        StackPane root = new StackPane();
        Scene scene = new Scene(root, 200, 100);

        // 注册键盘按下事件处理器
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.ESCAPE) {
                    ((Stage) scene.getWindow()).close();
                } else if (event.isControlDown() && event.getCode() == KeyCode.S) {
                    System.out.println("保存");
                }
            }
        });

        primaryStage.setScene(scene);
        primaryStage.setTitle("键盘事件演示");
        primaryStage.show();
    }

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

本文介绍了在 JavaFX 中操作键盘事件的基本方法。你可以通过注册键盘事件处理器和捕获键盘按键的方法来实现不同的操作。在实际应用中,你还可以结合其它组件和事件来实现更加丰富的用户交互体验。