首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaFX中获取CapsLock-state

在JavaFX中获取CapsLock-state
EN

Stack Overflow用户
提问于 2016-03-22 15:59:43
回答 1查看 1.9K关注 0票数 3

我正在尝试构建一个带有多个检查的输入表单。其中之一是检查CapsLock是否处于活动状态。如果我尝试与Java Swing一起构建此函数,它会起作用,请参见下面的代码。但在JavaFX中,它根本不起作用。我每次检查时都会得到相同的状态;看起来我的应用程序只是请求初始状态,然后保存它,并进一步呈现它……

JavaSwing (工作正常)

代码语言:javascript
复制
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 (始终呈现相同状态)

代码语言:javascript
复制
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));
        }
    }
});

有人知道为什么吗?我能做什么?

EN

回答 1

Stack Overflow用户

发布于 2016-03-22 18:12:30

编辑:这似乎是一个与windows相关的问题。This question has an answer that might work for you

当重复按caps lock时,以下控制台输出适用于我:

封装锁定已按下

Capslock状态: true

已按下胶囊锁

封装锁状态: false

代码语言:javascript
复制
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);
    }
}

我不确定是什么问题?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36148952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档