如何在JavaFX中的密码字段上实现CAPS LOCK警报气泡?

Wal*_*man 6 java javafx

我正在尝试在密码字段上实施大写锁定警报.如果大写锁定为ON,则气泡将显示在密码字段下方.我搜索了很多,但没有得到任何解决方案,我怎么能在JavaFX中的输入字段上实现这样的气泡.我找到了一些源代码来获得大写锁定状态.

    boolean isOn=Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
scene.setOnKeyReleased( event -> {
            if ( event.getCode() == KeyCode.CAPS ) {
                System.out.println("Capslock pressed");
                System.out.println("Capslock state: " + isOn);
            }
        });
Run Code Online (Sandbox Code Playgroud)

但我的问题是如何在文本字段上实现气泡警报.在这里你可以看到我必须做的事情.

在此输入图像描述

如果你建议我一些可能的方法,因为我是JavaFX的新手,这将会很有帮助.是否有任何JavaFX库在输入字段上执行此类气泡警报?

Mat*_*att 1

听起来您已经弄清楚如何获取输入状态,您可以为侦听器尝试类似的操作

public class Main extends Application {

    private Label capsLabel = new Label("Caps is ON");

    private boolean capsIsOn;

    @Override
    public void start(Stage stage) {
        System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(20));

        //Try adding this line to get state on startup
        capsLabel.setVisible(Toolkit.getDefaultToolkit().getLockingKeyState(20));

        TextField textField = new TextField();

        //Also try adding this line and to check again so when the field 
        //is selected it will check again
        textField.setOnMouseClicked(event -> capsLabel.setVisible(Toolkit.getDefaultToolkit().getLockingKeyState(20)));

        textField.setOnKeyReleased(keyEvent -> {
            if(keyEvent.getCode().toString().equals("CAPS")){
                capsIsOn = !capsIsOn;
                capsLabel.setVisible(capsIsOn);
            }
        });

        VBox vBox = new VBox();
        vBox.getChildren().addAll(textField, capsLabel);

        stage = new Stage();
        stage.setScene(new Scene(vBox));
        stage.show();
    }

    public static void main(String[] args) { launch(args); }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以将其设置在计时器上,并让它不断地亲自检查我不喜欢不断使用计算机资源的想法,但这不是我的项目。