java - JavaFX 中是否有可能获得移位字符?

标签 java javafx keyboard character shift

是否可以在 Java 或 JavaFX 中获取移位字符?

例如,如果我有字符 '1' 并且我希望在 qwertz 布局上使用移位字符。我得到了'!'

因为我有一个 JavaFX KeyEvent 并且我想要按下的字符。但是 KeyEvent 没有让我转换 1 的字符。仅适用于字母。

这是否可以在没有 JNI 的情况下实现,或者是否有解决方法,例如使用 TextField 和事件?

或者我应该使用自己的 map

最佳答案

你应该听KEY_TYPED事件及查询KeyEvent#getCharacter() 。如果用户输入 Shift+1,则 #getCharacter() 将返回 "!",至少在典型的美国 QWERTY 键盘。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class App extends Application {

  @Override
  public void start(Stage primaryStage) {
    Text text = new Text();
    primaryStage.addEventHandler(KeyEvent.KEY_TYPED, event -> {
      event.consume();
      text.setText(text.getText() + event.getCharacter());
    });
    primaryStage.setScene(new Scene(new StackPane(text), 500, 300));
    primaryStage.show();
  }
}

注意:以上并不是详尽的实现。例如,输入 Backspace 不会删除字符,而是会添加一个“未知字符”,因为 \b 字符没有表示形式。

关于java - JavaFX 中是否有可能获得移位字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58471391/

相关文章:

java - 需要一个正则表达式来验证带有 utc 的时间戳

JavaFx:数据绑定(bind)(文本字段)可以在生产模式下使用吗?

java - 如何在 Netbeans 11 中使用 Maven 和 Inno Setup 为 JavaFX 应用程序创建可执行安装程序

android - 覆盖默认的android键盘

java - 使用带有 POP3 协议(protocol)的 javamail 检索所有未读电子邮件

Java LocalConnection 客户端

java - 抽象父类(super class)中静态变量的替代方案

java - 打包非模块化JavaFX应用程序

jquery keypress 迭代每个循环?

c# - 如何在计算机锁定时按键盘键