是否有可能在 JavaFX 中获得换档字符?

Is it possible to get a shift character in JavaFX?

是否可以在 Java 或 JavaFX 中获取换档字符?

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

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

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

还是我应该使用自己的 Map

你应该收听 KEY_TYPED events and query KeyEvent#getCharacter()。如果用户键入 Shift+1 那么 #getCharacter() 将 return "!",至少在典型的美国标准键盘。

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 不会删除一个字符,而是会添加一个 "unknown character",因为 \b 字符没有表示。