我的场景中有一个 ScrollPane,并想向其中添加一系列节点。确切的金额必须是动态的。我一直在使用标签节点测试这个概念,并且可以成功地将任意数量的标签添加到 ScrollPane(当前是 VBox)的内容中。
我的问题是弄清楚如何允许用户在充满节点的 ScrollPane 中正常滚动。内容与滚动条相匹配;也就是说,当我向下滚动时,内容会向下移动。我向上滚动,内容向上滚动。因此,如果我有 10 个标签,其中只有五个当前可见,那么查看其他五个标签的本能动作就是向下滚动。不幸的是,这只是将整个内容向下移动,在顶部露出空白空间并隐藏更多标签。
如果有帮助,我可以发布一些示例代码,但我的攻击计划的要点是:
ScrollPane sp = new ScrollPane();
VBox content = new VBox();
sp.setContent(content);
for (int i = 0; i < 10; i++)
{
Label label = new Label("Label " + i);
content.setPrefHeight(content.getPrefHeight() + label.getPrefHeight());
content.getChildren().add(label);
}
因为我使用 VBox,所以标签(在 Y 轴上)彼此堆叠,这就是我想要的。随着更多标签的添加,滚动条需要反映 VBox 增加的大小。我尝试了一些方法来让它工作,包括ScrollPane.setVmax()
方法,这没问题,但我仍然遇到滚动方向将内容移动到错误方向的问题。我也尝试过EventHandler
并EventFilter
相应地修改值,但仍然没有解决滚动不向正确方向移动内容的问题。
答案似乎很简单,但它仍然在逃避我,即使在长时间弄乱代码之后也是如此。
编辑:
Jewelsea 的建议使用 aListView
解决了我的问题。但是,我仍然对为什么使用 aScrollPane
效果不佳感到好奇。此外,我在ListView
实现中遇到了奇怪的行为:我使用一个按钮手动Label
向视图添加一个新的。时不时地,视图会在添加新的Label
. 在更新滚动位置或显示新添加的Label
. 我不知道这是否是因为Label
视图管理了大约 20 个左右的实例,或者是否有更阴险的东西在起作用。