我正在尝试构建一个带有多个检查的输入表单。其中之一是检查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));
}
}
});
有人知道为什么吗?我能做什么?
发布于 2016-03-22 18:12:30
编辑:这似乎是一个与windows相关的问题。This question has an answer that might work for you
当重复按caps lock时,以下控制台输出适用于我:
封装锁定已按下
Capslock状态: true
已按下胶囊锁
封装锁状态: false
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import java.awt.*;
import java.awt.event.KeyEvent;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Pane root = new Pane();
Scene scene = new Scene(root, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
//scene.setOnKeyPressed( event -> {
scene.setOnKeyReleased( event -> {
if ( event.getCode() == KeyCode.CAPS ) {
System.out.println("Capslock pressed");
System.out.println("Capslock state: " + Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
});
}
public static void main(String[] args) {
launch(args);
}
}
我不确定是什么问题?
https://stackoverflow.com/questions/36148952
复制相似问题