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
KeyCode
有 isLetterKey()
其中:
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
}
我在 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
KeyCode
有 isLetterKey()
其中:
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
}