在setOnKeyTyped中调用TextField文本不一致



我正在用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中的一个错误?

先生,我不知道你想做什么,但我想帮忙,所以在你的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次

最后,你为什么要检查空&稍后检查其是否为空

最新更新