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