首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动卷曲JavaFX TextFlow

自动卷曲JavaFX TextFlow
EN

Stack Overflow用户
提问于 2015-01-30 19:23:50
回答 1查看 6K关注 0票数 4

我有一个JavaFX TextFlow封装在一个ScrollPane中,每当一个新的Text被添加到TextFlow中时,我试图让它自动滚动到底部。

我尝试过将ScrollPanevvalue的侦听器附加到:

  • ScrollPanevvalue属性本身.
    • 这会将ScrollPane锁定到底部,这是不需要的。

  • ScrollPaneviewportBounds属性.
    • 这是行不通的。

  • TextFlow的孩子名单.
    • 奇怪的是,这个滚动到了最新的Text添加之前的底部。在滚动之前,我已经尝试过显式请求布局,但这没有任何效果。

为了更大的感谢,我希望滚动这样的内容:如果新添加的内容太大,无法立即显示,ScrollPane滚动使新添加位于顶部,用户应该手动滚动以查看“溢出”。正如我所说的,这将是一个额外的奖励,只是滚动到底部将是很好的,因为我不期望这么大的增加(定期)。

不,我不想转到TextArea上,因为这会比较简单。我希望能够轻松地向TextFlow添加常规、粗体和斜体文本,而TextArea不支持这一点。我也试过托马斯·米库拉的RichTextFX,但是

  1. 它不停地在内部代码上抛出StackOverflowError,而没有解释。
  2. 我真的不想在这个项目中使用第三方库。

因此,任何与TextFlow一起工作的解决方案都将不胜感激。

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

代码语言:javascript
复制
private ScrollPane textContainer;
private TextFlow text;

public BaseGui() {
    //....
    text.getChildren().addListener(
                (ListChangeListener<Node>) ((change) -> {
                    text.layout();
                    textContainer.layout();
                    textContainer.setVvalue(1.0f);
                }));
    textContainer.setContent(text);
    //....
}

public void appendBold(String msg) { //similar for italic and regular
    append(msg, "-fx-font-weight: bold");
}

private synchronized void append(String msg, String style) {
    Platform.runLater(() -> {
        Text t = new Text(msg);
        t.setFont(segoe(13));
        if (!style.equals("")) {
            t.setStyle(style);
        }
        text.getChildren().add(t);
    });
}

它不会因为代码风格赢得任何奖项,但由于这是一个个人项目,我并不真正关心。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 21:29:49

修改第三种方法,使用layout()而不是requestLayout()

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

代码语言:javascript
复制
requestLayout();
doSomethingThatDependsOnLayout();

doSomethingThatDependsOnLayout()将看到旧的布局。

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

代码语言:javascript
复制
layout();
doSomethingThatDependsOnLayout();

doSomethingThatDependsOnLayout()将看到新的布局。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28243156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档