【问题标题】:JavaFX display text area appending - any way to highlight/make new text more visible?JavaFX 显示文本区域附加 - 有什么方法可以突出显示/使新文本更明显?
【发布时间】:2017-03-27 13:44:29
【问题描述】:

我的 JavaFX 应用程序中有一个显示文本区域。

它有几种附加字符串的方法。

我希望任何新添加的文本都有某种反馈,以便用户更直观地了解正在显示的新文本。

理想情况下,我想要以下之一,但我非常愿意接受其他建议:

  • 附加的文本被“键入”,就好像有人在显示文本区域本身键入它一样。或者..
  • 以某种方式突出显示新文本。

尽管如此,我愿意接受建议!

谢谢。

【问题讨论】:

  • 遍历文本的chars。在TextArea 中插入一个char,暂停一段时间,重复...这将产生打字效果
  • 谢谢,这样做的标准方法是什么?我显然不想使用 thread.sleep();

标签: java javafx user-experience


【解决方案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());

【讨论】:

  • 您好,感谢您的回复 - 侦听器将是理想的,但是当直接放入我在控制器中的初始化时,它似乎没有任何效果。可以确认文本显示区域设置为不可编辑。你有什么建议吗?
  • 在进行文本更改后,似乎随后会重置插入符号。因此,一种解决方法是将选择调用包装在 Platform.runLater(...) 中(尽管感觉有点像 hack)。查看更新。
  • 完美!!这现在有效。在这种情况下,由于它是一个玩具项目,我想我可以接受一点 hacky :) 非常感谢您,+1!
【解决方案2】:

也许可以尝试使用 RichTextArea (https://github.com/TomasMikula/RichTextFX),然后有很多可能以不同的方式显示您的文本。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多