2015-10-31 26 views
0

我正在用JavaFX进行Java语言的打字测试。我想比较在TextField中键入的文本与定义的随机单词。但是,TextField只会随着刚输入的字母而不是所有的时间更新。以下代码是发生此问题的位置。调用setOnKeyTyped中的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中的错误?

+0

对不起,我无法读取if语句。我将这个动作设置为onkeypressed(),但这只是使问题更加稳定。它不会更新field.getText()与我按下的字符,直到事实发生。 onkeyreleaced()工作正常,但我无法测试我刚刚按下的字符。所以我无法测试它是否是一个空间,所以我可以清除这个区域。 –

+0

我将删除该评论。 – Elltz

回答

0

先生,我不知道你想做什么,但我想帮助,所以在您的onKeyPressed()onKeyReleased(),它给出了一个KeyEvente你的情况,你可以使用代替Character.isWhitespace() & e.getCharacter().charAt(0),也/b

为了让您的KeyCode

field.setOnKeyTyped(e -> { 
     KeyCode kc = e.getCode(); // your keycode here is the character you just pressed 
现在您可以检查一大堆好吃的邀请码

而不脱离字符

平等检查

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

if(kc.isWhitespaceKey()) //你的输入,标签,空间等

,你也可以利用这些方法

TextField.deletePreviousChar();TextField.deleteNextChar();这可能会在清除之前为您节省所有选择。如果要清除他们一样的10,然后循环10次

最后为什么你检查空虚&后来检查,如果它不是空

+0

我明白KeyCode是如何工作的,但有时我用键盘按下的字符会添加到字段中,有时候不会。防止这种情况的唯一方法是,如果我使用setOnKeyReleased(),那么字段将更新为新字符。但是,setOnKeyReceased()不允许我测试输入的字符。 (int)(e.getCharecter.charAt(0))总是返回0.对不起,令人困惑的问题。 –