在setOnKeyTyped

时间:2015-10-31 19:12:23

标签: java javafx

我正在使用JavaFX在Java中进行打字测试。我想将TextField中输入的文本与定义的随机单词进行比较。但是,TextField仅更新时有时输入的字母而不是所有时间。以下代码是发生此问题的地方。

    field.setOnKeyTyped(e -> {

        String typingWord = field.getText();

        if(     typingWord.isEmpty()          && 
                e.getCharacter().charAt(0) == '\b' && 
                !(typedWords.size() == 0)          &&
                typingWord.equals(previousWord)){

            field.setText(typedWords.get(typedWords.size() - 1));
            typedWords.remove(typedWords.size() - 1);
            field.positionCaret(typingWord.length());
            index--;
        }

        //compare random words to typed words

        if (Character.isWhitespace(e.getCharacter().charAt(0))) {

            typedWords.set(index, typingWord);
            field.clear();
            e.consume();
            index++;
        }

        previousWord = field.getText();
    });

这纯粹是由于我的电脑速度还是只是JavaFX中的一个错误?

1 个答案:

答案 0 :(得分:0)

先生,我不知道你想做什么,但我想提供帮助,所以在你的onKeyPressed()onKeyReleased()中,它会提供KeyEvent e你的情况,你可以使用它代替Character.isWhitespace()& e.getCharacter().charAt(0)以及/b

获取KeyCode

field.setOnKeyTyped(e -> {
      KeyCode kc = e.getCode(); // your keycode here is the character you just pressed

现在使用KeyCode,您可以检查很多好东西,而不会落入角色

平等检查

if(kc == KeyCode.BACK_SPACE) //检查您的退格

if(kc.isWhitespaceKey()) //您的输入,标签,空格等

你也可以使用这些方法

TextField.deletePreviousChar();TextField.deleteNextChar();可能会在清除之前为您节省所有选择。如果你想清除其中的10个,那么循环10次

最后为什么要检查空虚&稍后检查它是否为空