JavaFX可以监控键盘输入信息。JavaFX的键盘输入是“javafx.scene.input.KeyEvent”。键盘输入有ANY,CHAR_UNDEFINED,KEY_PRESSED,KEY_RELEASED,KEY_TYPED五种类型。
ANY绑定所有的键盘事件,包含“CHAR_UNDEFINED,KEY_PRESSED,KEY_RELEASED,KEY_TYPED”。
五个键盘事件对应如下:
Modifier and Type | Field | Description |
static final EventType<KeyEvent> | ANY | Common supertype for all key event types. |
static final String | CHAR_UNDEFINED | KEY_PRESSED and KEY_RELEASED events which do not map to a valid Unicode character use this for the keyChar value. |
static final EventType<KeyEvent> | KEY_PRESSED | This event occurs when a key has been pressed. |
static final EventType<KeyEvent> | KEY_RELEASED | This event occurs when a key has been released. |
static final EventType<KeyEvent> | KEY_TYPED | This event occurs when a character-generating key was typed (pressed and released). |
KEY_TYPED当键盘输入字符时触发,当按下“F8”等特殊按钮,不会触发。
KEY_TYPED示例,在对话款输入字符,触发键盘KEY_TYPED事件:
package javafxdemo.ch09.keyevent;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
/**
* @copyright 2003-2024
* @author qiao wei
* @date 2024-07-17
* @version 1.0
* @brief
* @history name
* date
* brief
*/
public class KeyTyped extends Application {
public KeyTyped() {
}
public static void main(String[] args) {
try {
Application.launch(KeyTyped.class, args);
} catch (Exception exception) {
exception.printStackTrace();
}
}
@Override
public void start(Stage primaryStage) throws Exception {
Label nameLabel = new Label("Name:");
TextField nameTextField = new TextField();
HBox root = new HBox();
root.setPadding(new Insets(20));
root.setSpacing(20);
root.getChildren().addAll(nameLabel, nameTextField);
// 注册键盘事件。获取用户输入的字符。当触发特殊按键(例如:F8等按键),不会触发该方法。
nameTextField.addEventHandler(KeyEvent.KEY_TYPED, this::handle);
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Key Typed Event");
primaryStage.show();
}
/**
* @author qiao wei
* @brief 获取用户输入的字符。
* @param event 触发键盘事件。当按下字符时,触发该方法。
* @return
* @throws
* @history name
* date
* brief
*/
private void handle(KeyEvent event) {
String content = event.getCharacter();
// 键盘输入为字符时,中断键盘事件。
if ((!content.isEmpty()) && (!Character.isLetter(content.charAt(0)))) {
// 终端键盘事件。
event.consume();
System.out.println(event.getEventType().getName() + ": Character=" + event.getCharacter());
}
}
}