JavaFX检查Event的KeyCode是否为数字键

时间:2018-01-06 14:24:00

标签: java javafx javafx-8 javafx-2

我正在创建一个自定义文本字段类,其中我有自定义行为,具体取决于用户是否在其上键入数字键。

!event.getCode().isDigitKey()总是返回true,即使我输入数字也是如此。我试图检查KeyCode是否也是一个字母,但仍然返回false。这里似乎有什么问题?

在针对任何其他KeyCode 检查事件的KeyCode 时,我总是会弄错,即使它们应该相等。

public class ScoreField extends TextField implements Customizable {

public ScoreField() {
    super();
    customize();
}

@Override
public void customize() {
    this.setOnKeyTyped(new EventHandler<KeyEvent>() {
        int curChar = 0;

        @Override
        public void handle(KeyEvent event) {
            event.consume();
            KeyCode keyTyped  = event.getCode();
            char    charTyped = event.getCharacter().charAt(0);

            System.out.println(charTyped);

            // Do nothing if not a digit
            if (!event.getCode().isDigitKey()) {
                System.out.println("NOT A DIGIT KEY");
                if (keyTyped == KeyCode.BACK_SPACE) {
                    System.out.println("RESETTING");
                    resetText();
                    return;
                }
                return;
            }

            if (getText().length() >= 5) {
                if (curChar == 2) {
                    curChar = 3;
                }
                if (curChar == 5) {
                    curChar = 0;
                }
                StringBuilder builder = new StringBuilder(getText());
                builder.setCharAt(curChar, charTyped);
                setText(builder.toString());
                curChar++;
                return;
            }
            if (getText().length() == 2) {
                setText(getText() + ":");
            }
            setText(getText() + charTyped);
        }
    });
}

private void resetText() {
    setText("");
}

}

1 个答案:

答案 0 :(得分:1)

正如James_D所说:

  

对于键入事件,代码始终为KeyCode.UNDEFINED

所以我按照他的建议做了,而不是检查KeyCode,如果它是一个数字,我在1ST if语句中使用event.getCharacter()[0]检查Character.isDigit(char),它对我的​​情况完全有效。

P.S:我尝试将TextFormatter与StringConverter一起使用,但我无法使其工作。