首页 > 解决方案 > 按下键时单击 javafx 复选框不会改变状态

问题描述

我有一个非常简单的问题,在任何其他帖子中都找不到:

在 javafx15 / java15.0.1 中,我试图在按下例如 CONTROL 键的同时单击复选框......状态没有改变。

我试图抓住键(在复选框上有一个键事件),我确实抓住了按下的控制键......但是如果同时按下一个键,复选框的状态就不会改变。

如何让它以透明的方式工作?

这是说明问题的最基本的简单代码:

package checkboxkeypressed;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.stage.Stage;

public class CheckboxWhileKeyPressedNotWorking extends Application {

    private CheckBox checkbox = new CheckBox();

    @Override
    public void start(Stage primaryStage) {
        checkbox.setText("Click me while pressing a key...");
        Scene scene = new Scene(checkbox, 200, 50);

        primaryStage.setTitle("Checkbox cannot be ticked while a key is pressed !!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

任何帮助将不胜感激。

标签: javafxcheckboxkeyevent

解决方案


改进etuygar 提供的解决方案

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.stage.Stage;

public class CheckboxWhileKeyPressedNotWorking extends Application {

    private final CheckBox checkbox = new CheckBox();
    private boolean isControlKeyDown = false;

    @Override
    public void start(Stage primaryStage) {

        checkbox.setText("Click me while pressing <CNTRL> key");
        checkbox.setOnMouseClicked(e->{
            if(isControlKeyDown){
                checkbox.fire(); //change check box state
            }
        });

        Scene scene = new Scene(checkbox, 300, 50);
        scene.setOnKeyPressed(keyEvent -> {
            isControlKeyDown = keyEvent.isControlDown();
        });

        scene.setOnKeyReleased(keyEvent -> {
            isControlKeyDown = keyEvent.isControlDown();
        });

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

推荐阅读