2017-03-27 60 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! –