自动滚动Javafx TextFlow

 2023-02-16    382  

问题描述

我有一个包裹在ScrollPane中的Javafx TextFlow,每当将新的Text添加到> Text中,我试图将其自动滚动到底部.

.

自动滚动Javafx TextFlow

我尝试将听众最大化ScrollPane’s vvalue到:

  • ScrollPane的vvalue属性本身.
    • 这将ScrollPane锁定到底部,这是不足的.
  • ScrollPane’s viewportBounds属性.
    • 这只是不起作用.
  • TextFlow的儿童名单.
    • 此卷轴滚动到 之前 Text的位置.我已经尝试在滚动之前明确要求布局,但这没有效果

要多大的感谢,我想滚动,以便如果新添加太大而无法一次显示,则ScrollPane滚动,以使新添加在顶部,用户应滚动手动查看”溢出”.正如我所说,这将是一个额外的好处,只要滚动到底部就可以了,因为我不希望这么大的添加(定期).

,不,我不会切换到TextArea,这将相对简单.我希望能够轻松地将常规,粗体和斜体文本添加到TextFlow中,并且TextArea不支持此.我还尝试了托马斯·米库拉(Thomas Mikula)的 richtextfx ,但是

  1. 它不断地将StackOverflowError s扔在内部代码上,而无需说明.
  2. 我真的不想在此项目中使用第三方库.

因此,任何将与TextFlow一起使用的解决方案都将不胜感激.

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

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);
    });
}

它不会赢得代码样式的任何奖项,但是由于这是一个个人项目,所以我真的不在乎.

推荐答案

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

requestLayout()将布局标记为 dirty ,并在上引起下一个脉冲.在代码

requestLayout();
doSomethingThatDependsOnLayout();

doSomethingThatDependsOnLayout()将看到旧布局.

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

layout();
doSomethingThatDependsOnLayout();

doSomethingThatDependsOnLayout()将看到 new 布局.

以上所述是小编给大家介绍的自动滚动Javafx TextFlow,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34081.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。