自动滚动JavaFX TextFlow

时间:2015-01-30 19:23:50

标签: java javafx textflow

我在TextFlow中包含了一个JavaFX ScrollPane,我试图在Text添加新的TextFlow时自动滚动到底部}。

我尝试将最多ScrollPanevvalue的听众附加到:

  • ScrollPane的{​​{1}}属性本身。
    • 这会将vvalue锁定到底部,这是不可取的。
  • ScrollPane的{​​{1}}属性。
    • 这不起作用。
  • ScrollPane的子列表。
    • 奇怪地,在添加最新viewportBounds之前滚动到 底部的位置。我已尝试在滚动之前明确请求布局,但这没有效果

非常感谢,我想滚动一下,如果新添加的内容太大而无法一次显示,TextFlow滚动以使新添加位于顶部,并且用户应手动滚动以查看“溢出”。正如我所说,这将是一个额外的好处,只是滚动到底部会很好,因为我不期望如此大的增加(定期)。

不,我没有切换到Text,这会相对简单。我希望能够轻松地向ScrollPane添加常规,粗体和斜体文字,TextArea不支持此功能。我也尝试了Thomas Mikula的RichTextFX,但是

  1. 它一直在内部代码上抛出TextFlow而没有解释。
  2. 我真的不想在这个项目中使用第三方库。
  3. 因此,非常感谢任何适用于TextArea的解决方案。

    编辑:解决方案,按要求:

    StackOverflowError

    它不会赢得任何代码风格的奖项,但因为这是一个我并不在乎的个人项目。

1 个答案:

答案 0 :(得分:4)

修改第3种方法,使用layout()代替requestLayout()

requestLayout()将布局标记为 dirty ,并在下一个脉冲上重新布局。在代码中

requestLayout();
doSomethingThatDependsOnLayout();

doSomethingThatDependsOnLayout()会看到布局。

layout()立即(同步)执行布局,但前提是布局。 (在您的情况下,更改TextFlow的文本会将其布局标记为脏。)在代码中

layout();
doSomethingThatDependsOnLayout();

doSomethingThatDependsOnLayout()会看到布局。