6

我的场景中有一个 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()方法,这没问题,但我仍然遇到滚动方向将内容移动到错误方向的问题。我也尝试过EventHandlerEventFilter相应地修改值,但仍然没有解决滚动不向正确方向移动内容的问题。

答案似乎很简单,但它仍然在逃避我,即使在长时间弄乱代码之后也是如此。

编辑:

Jewelsea 的建议使用 aListView解决了我的问题。但是,我仍然对为什么使用 aScrollPane效果不佳感到好奇。此外,我在ListView实现中遇到了奇怪的行为:我使用一个按钮手动Label向视图添加一个新的。时不时地,视图会在添加新的Label. 在更新滚动位置或显示新添加的Label. 我不知道这是否是因为Label视图管理了大约 20 个左右的实例,或者是否有更阴险的东西在起作用。

4

1 回答 1

1

关于滚动窗格问题,我知道您想要做的事情是可能的,因为我正在做一些非常相似的事情。根据您在上面提供的代码片段,我建议尝试一些事情......

  • 为 ScrollPane 指定要遵循的首选高度和宽度。
  • 不要给内容 VBox 任何高度大小设置偏好,因为它会随着内容的增长而增长。添加内容后也不需要更新它的高度。
  • 使用 VBox 的setAlignment方法将其内容对齐TOP_LEFTTOP_CENTERTOP_RIGHT
  • 使用getPrefHeight()方法时要小心,因为如果您事先没有使用setPrefHeight()我相信它会返回-1

希望这可以帮助你!

于 2013-08-09T19:34:16.607 回答