我有一个TextFlow
包装在.ScrollPane
Text
TextFlow
我已经尝试将最大的监听ScrollPane
器附加vvalue
到:
- 的属性本身
ScrollPane
。vvalue
- 这会将 锁定
ScrollPane
到底部,这是不希望的。
- 这会将 锁定
- 的财产
ScrollPane
。viewportBounds
- 这只是行不通。
- 的
TextFlow
孩子名单。- 奇怪的是,这会滚动到添加最新版本之前的底部位置。
Text
我曾尝试在滚动之前明确请求布局,但这没有效果
- 奇怪的是,这会滚动到添加最新版本之前的底部位置。
非常感谢您,我想滚动以使如果新添加的内容太大而无法立即显示,则ScrollPane
滚动以使新添加的内容位于顶部,并且用户应手动滚动以查看“溢出” '。正如我所说,这将是一个额外的好处,只需滚动到底部就可以了,因为我不希望有这么大的添加(定期)。
不,我不会切换到 a TextArea
,这会相对简单。我希望能够轻松地将常规、粗体和斜体文本添加到 中TextFlow
,并且TextArea
不支持这一点。我也试过 Thomas Mikula 的RichTextFX,但是
StackOverflowError
它不断地在内部代码上抛出s 而没有解释。- 我真的不想为这个项目使用第三方库。
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);
});
}
它不会因代码风格赢得任何奖项,但由于这是一个个人项目,我并不在乎。