gpt4 book ai didi

javafx-2 - JavaFX - 使用正确的滚动方向将节点添加到 ScrollPane

转载 作者:行者123 更新时间:2023-12-04 15:59:00 25 4
gpt4 key购买 nike

我的场景中有一个 ScrollPane,我想向其中添加一系列节点。确切的数量必须是动态的。我一直在用 Label 节点测试这个概念,并且可以成功地将任意数量的标签添加到 ScrollPane(当前是 VBox)的内容中。

我的问题是弄清楚如何允许用户在充满节点的 ScrollPane 中正常滚动。内容与滚动条同步;也就是说,当我向下滚动时,内容向下移动。我向上滚动,内容向上滚动。因此,如果我有 10 个标签,其中当前只有 5 个可见,那么查看其他 5 个标签的本能操作是向下滚动。不幸的是,这只会将整个内容向下移动,在顶部暴露空白空间并隐藏更多标签。

如果有帮助,我可以发布一些示例代码,但我的攻击计划的要点是:

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 轴上)彼此堆叠,这就是我想要的。随着更多 Label 的添加,ScrollBar 需要反射(reflect) VBox 增加的大小。
我尝试了一些方法来让它工作,包括 ScrollPane.setVmax()方法,这没问题,但我仍然遇到滚动方向将内容移动到错误方向的问题。我也试过 EventHandlerEventFilter相应地修改值,仍然没有解决滚动没有在正确的方向移动内容的问题。

答案看起来很简单,但它继续逃避我,即使在长时间弄乱代码之后也是如此。

编辑:

Jewelsea 建议使用 ListView解决了我的问题。但是,我仍然很好奇为什么使用 ScrollPane没有那么好。此外,我遇到了 ListView 的奇怪行为。实现:我用一个按钮手动添加一个新的 Label到 View 。添加新的 Label 后, View 会时不时地卡住。 .在更新滚动位置或显示新添加的 Label 之前,它会锁定几秒钟.不知道是不是因为大概有20个左右 Label由 View 管理的实例或者是否有更阴险的东西在起作用。

最佳答案

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

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

  • 希望这可以帮助你!

    关于javafx-2 - JavaFX - 使用正确的滚动方向将节点添加到 ScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094607/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com