JavaFX:键盘输入KeyEvent事件处理

105 篇文章 5 订阅

JavaFX可以监控键盘输入信息。JavaFX的键盘输入是“javafx.scene.input.KeyEvent”。键盘输入有ANY,CHAR_UNDEFINEDKEY_PRESSEDKEY_RELEASEDKEY_TYPED五种类型。

ANY绑定所有的键盘事件,包含“CHAR_UNDEFINEDKEY_PRESSEDKEY_RELEASEDKEY_TYPED”。

五个键盘事件对应如下:

 

Modifier and TypeFieldDescription
static final EventType<KeyEvent>ANYCommon supertype for all key event types.
static final StringCHAR_UNDEFINEDKEY_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_PRESSEDThis event occurs when a key has been pressed.
static final EventType<KeyEvent>KEY_RELEASEDThis event occurs when a key has been released.
static final EventType<KeyEvent>KEY_TYPEDThis 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());
    }
  }
}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值