2015-10-31 22 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.對不起,令人困惑的問題。 –