【发布时间】:2016-07-09 00:27:43
【问题描述】:
我正在尝试构建一个包含多项检查的输入表单。其中之一是检查 CapsLock 是否处于活动状态。如果我尝试与 Java Swing 一起构建此功能,它会起作用,请参见下面的代码。但在 JavaFX 中,它根本不起作用。每次检查时我都会得到相同的状态;似乎我的应用程序只是要求初始状态,然后保存它,并进一步展示它......
JavaSwing(运行良好)
frame.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_CAPS_LOCK){
System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
} else if(e.isShiftDown()){
System.out.println("SHIFT");
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_CAPS_LOCK){
System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
} else if(e.isShiftDown()){
System.out.println("SHIFT");
}
}
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_CAPS_LOCK){
System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
} else if(e.isShiftDown()){
System.out.println("SHIFT");
}
}
});
JavaFX(始终呈现相同的状态)
scene.setOnKeyReleased(new EventHandler<javafx.scene.input.KeyEvent>() {
@Override
public void handle(javafx.scene.input.KeyEvent event) {
if(event.getCode() == KeyCode.CAPS){
System.out.println("CAPS");
System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
}
});
有人知道为什么吗?我能做什么?
【问题讨论】:
-
这个问题还包含为什么它在 Swing 中有效但在 JavaFX 中无效
-
不可能,这个bugs.openjdk.java.net/browse/JDK-8090882有一个bug
标签: java javafx keylistener capslock