2017-03-27 55 views
0

我在我的JavaFX應用程序中有一個顯示文本區域。JavaFX顯示文本區域追加 - 任何突出顯示/使新文本更明顯的方法?

它有幾種將字符串附加到它的方法。

我想要的是任何新近添加的文本都有某種反饋,以便用戶更直觀地瞭解正在顯示的新文本。

理想是什麼,我想是以下情況之一,但我接受其他的建議非常開放:

  • 所附的文字是「打出來」,就好像有人在鍵入它到顯示文本區域本身。或..
  • 某種突出顯示的新文本。

雖然我再次提出建議!

謝謝。

+2

可能的重複http://stackoverflow.com/questions/9128535/highlighting-strings-in-javafx-textarea –

+0

循環遍歷文本的「字符」。在'TextArea'中插入一個'char',暫停一段時間,重複......這會給鍵入效果 –

+0

謝謝,這樣做的標準方式是什麼?我顯然不想使用thread.sleep(); –

回答

1

正如Highlighting Strings in JavaFX TextArea所建議的那樣,您可以選擇新的文本。

假設文本區域是不可編輯的,而你永遠只能追加到現有文本的末尾,你可以這樣做:

textArea.textProperty().addListener((obs, oldText, newText) -> { 
    if (newText.length() > oldText.length()) { 
     Platform.runLater(() -> 
      textArea.selectRange(oldText.length(), newText.length())); 
    } 
}); 

如果你的文本區域是可編輯的,或者你更用它一般來說,你可以在每次追加文本時做類似的事情。例如:

String message = ... ; 
textArea.positionCaret(textArea.getLength()); 
textArea.appendText(message); 
textArea.extendSelection(textArea.getLength()); 
+0

嗨,感謝您的答覆 - 聽衆會是理想的,但是直接放入我在控制器中的初始化時,它似乎沒有任何影響。可以確認文本顯示區域設置爲不可編輯。你有什麼建議嗎? –

+1

在文本更改完成後,它看起來像是隨後重置了插入符。所以一個解決方法是將選擇調用包裝在一個'Platform.runLater(...)'中(雖然感覺有點像黑客)。查看更新。 –

+0

完美!這現在起作用。在這種情況下,因爲這是一個玩具項目,所以我認爲我可以做一點小事:)非常感謝你,+1! –