当前位置: 首页 > 知识库问答 >
问题:

在JavaFX中获取CapsLock-state

岳景明
2023-03-14
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));
        }
    }
});

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

共有1个答案

邢英奕
2023-03-14

编辑:这似乎是一个与windows相关的问题。这个问题有一个可能对你有用的答案

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

Capslock已按下

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);
    }
}
 类似资料:
  • 我在许多地方看到了关于如何使用代码获取表头的示例 像这里:如何防止TableView从做TableColsta重新排序在javaFX 8? 但是这个代码为我返回。 如何到达然后?

  • 问题内容: 我读过几个月前,Oracle同意使JavaFX开源。我想参与开发过程,但是不知道从哪里获得开发资源。 我将不胜感激:) 最好的祝福, 大卫 问题答案: 看起来开发在这里: http://openjdk.java.net/projects/openjfx/

  • 我正在编写一个javafx UI,希望从单击的MenuItem的eventHandler中获取contextMenu的所有者节点。 我的代码: 我想做的是获取一个对选中了上下文菜单的选项卡的引用。 我能够通过MenuItem eventHandler的handle(ActionEvent e)方法中的以下代码获得对MenuItem ContextMenu的引用: 我的想法是在菜单上使用Contex

  • 问题内容: 在JavaFX中获取节点绝对位置的最佳方法是什么? 假设我们在窗格(Hbox,Stackpane或任何其他窗格)中有一个节点,并且它本身可能有一个父节点。 我想获取该节点的绝对位置,并在另一个窗格中使用它。 问题答案: 这取决于您所说的“绝对”的含义。节点有一个坐标系,父节点有一个坐标系,父节点有一个坐标系,依此类推,最终有一个坐标系和一个屏幕坐标系(可能是物理显示设备的集合)。 您可

  • 问题内容: 我在许多地方看到了有关如何通过代码获取表头的示例 但是这段代码为我返回。 怎么到达呢? 问题答案: 的创建者为,而默认值只有在应用CSS后才会创建。 您可以在将添加到后将其调用,然后在此调用之后访问。 或者,侦听中的更改并在设置外观后执行该代码。 此外,我建议使用而不是使用来检索标题行(无论如何,您都在使用包)。

  • 我目前正在使用 但这并没有返回选择模型中的一个选定项。