我正在用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次
最后,你为什么要检查空&稍后检查其是否为空