JavaFX 确定是否在 a 和 Z 之间按下了键

JavaFX determinate if key pressed between a and Z

我在 JavaFX 中有一个 ListView<String>,我想确定用户是否按下了 a(小写)和 Z(大写)之间的键。

我处理它的代码如下所示:

@FXML
private void chooseElementByKey(KeyEvent event){
    if(event.getCode() == KeyCode.TAB){
        textfieldElement.setText("Element 1");
        event.consume();
        textfieldElement.requestFocus();
    }else if(/*put magic here*/){
        //more magic ...
    }
}

所以我想确定是否按下了 a 和 Z 之间的键。一定有更好的方法

if(event.getCode() == KeyCode.a || event.getCode() == KeyCode.b ...等等

感谢您的帮助!

在我的评论中使用 link:

https://docs.oracle.com/javafx/2/api/javafx/scene/input/KeyCode.html

KeyCodeisLetterKey() 其中:

Returns true if this key code corresponds to a letter key

所以我相信你也应该可以做到if(event.getKeyCode().isLetterKey())。但是,它没有定义什么被认为是 "a letter key",所以我不能 100% 确定这对你有用,例如,如果你不想允许非英语字符。

编辑:据此link:

https://bugs.openjdk.java.net/browse/JDK-8090108

isLetterKey() 处理非英语字符时存在一些错误,例如:

KeyCode.isLetterKey returns false for Swedish letters ö, ä and å.

虽然问题已经得到解答,但我将为那些无法使用 isLetterKey() 方法的人做出另一份贡献。

A-Z

对于那些不想(甚至不能)使用isLetterKey()功能的人来说,这将是一个很好的解决方法:

if(ke.getKeyCode() >= KeyEvent.VK_A && ke.getKeyCode() <= KeyEvent.VK_Z) {
    //do Something
}

有特殊字符

对于那些由于语言特殊字符而无法访问isLetterKey()功能的人,还有以下可能:

1.创建一个字符数组,包含所有特殊字符

char[] specialChars = {'ä', 'ö', 'ü'};
boolean foundSpecialChar = false;

2。将数组的内容与 KeyCode()

进行比较
for(int i = 0; i < specialChars.length; i++) {
    if(ke.getKeyChar() == specialChars[i]) {
        foundSpecialChar = true;
    }
}

3。对 A - Z 示例的 if 条件添加额外检查

if((ke.getKeyCode() >= KeyEvent.VK_A && ke.getKeyCode() <= KeyEvent.VK_Z) || foundSpecialChar) {
//do Something here
}