是否有可能在 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
字符没有表示。
是否可以在 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
字符没有表示。