Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFX中使用KeyCombination获取用户输入?_Java_Javafx_User Input_Keycode - Fatal编程技术网

如何在JavaFX中使用KeyCombination获取用户输入?

如何在JavaFX中使用KeyCombination获取用户输入?,java,javafx,user-input,keycode,Java,Javafx,User Input,Keycode,我正在开发一个简单的in-fix-to-post-fix转换器。我想从键盘获取用户的输入。要输入一些符号,例如“+”,用户必须按shift键。我使用KeyCombination对象来捕获用户是否正在使用shift 我的代码一直给我这个错误:键代码不能匹配修改器键 然而,当我查看键代码时,它不是Shift,而是按下任何数字行键。例如,如果用户按下Shift+=,则键代码等于,而不是Shift_DOWN修饰符。代码按预期工作,但我不知道如何消除此异常 tfInput.setOnKeyPressed(

我正在开发一个简单的in-fix-to-post-fix转换器。我想从键盘获取用户的输入。要输入一些符号,例如“+”,用户必须按shift键。我使用KeyCombination对象来捕获用户是否正在使用shift

我的代码一直给我这个错误:键代码不能匹配修改器键

然而,当我查看键代码时,它不是Shift,而是按下任何数字行键。例如,如果用户按下Shift+=,则键代码等于,而不是Shift_DOWN修饰符。代码按预期工作,但我不知道如何消除此异常

tfInput.setOnKeyPressed(e -> {

        if (e.isShiftDown()) {
            KeyCombination kc = new KeyCodeCombination(e.getCode(),
                    KeyCombination.SHIFT_DOWN);
            userInput = kc.toString();  
        }

出现此错误的原因是,组合键中的第一个参数是keycode,而shift是一个关键点修改器。在继续之前,可以通过检查关键点是否为shift来停止出现此错误

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class Main extends Application {

    private String userInput;

    @Override
    public void start(Stage stage) {
        TextField textField = new TextField();

        textField.setOnKeyPressed(e -> {
            System.out.println(e.getCode());
            if (e.isShiftDown()&&!e.getCode().toString().equals("SHIFT")) {
                KeyCombination kc = new KeyCodeCombination(e.getCode(), KeyCombination.CONTROL_ANY);
                userInput = kc.toString();
                System.out.println(userInput);
            }
        });

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

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

这似乎是错误的做法。为什么不使用文本字段并使用
textProperty()
?@James\u D注册一个侦听器呢?这可能不是最好的方法。我对JavaFX不是很熟悉。我需要知道什么时候按下了shift键和另一个键,而keyCombo似乎就是我需要的,所以你计划忽略,比如说,从数字键盘输入的
+
符号,没有使用shift键-这就是目的吗?@James_D No。还有更多的代码处理这个问题。基本上,文本字段tfInput中键入的任何内容都被分配给字符串。但是组合键并没有像我预期的那样存储,例如+被存储为=。“所以我必须解释清楚,”詹姆斯说,“不,只有一个听众。tfInput.setOnKeyPressed(e->{if(e.isShiftDown()){KeyCombination kc=newkeycodecompbination(e.getCode(),KeyCombination.SHIFT_DOWN);userInput=kc.toString();}否则{userInput=e.getText();}parseInput(用户输入);});