我在我的场景中有一个ScrollPane,并且想要为它添加一系列节点。确切的金额必须是动态的。我一直在用Label节点测试这个概念,并且可以成功添加尽可能多的标签,以满足ScrollPane(当前是VBox)的内容。JavaFX - 以正确的滚动方向向ScrollPane添加节点
我的问题是搞清楚如何让用户正常滚动通过ScrollPane充满节点。内容与滚动条一致;也就是说,当我向下滚动时,内容向下移动。我向上滚动,内容滚动。因此,如果我有10个标签,其中只有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);
}
因为我使用的是垂直框,标签堆叠(Y轴)顶上一个另一个,这是我想要的。随着更多标签的添加,ScrollBar需要反映VBox的增大尺寸。 我已经尝试了几种方法来实现这个工作,包括ScrollPane.setVmax()
方法,这没问题,但我仍然遇到滚动方向将内容向错误方向移动的问题。我也尝试过EventHandler
和EventFilter
来修改相应的值,但仍然没有解决滚动问题而不能将内容向正确的方向移动。
答案似乎很简单,但它仍然继续逃避我,即使经过很长时间的代码乱七八糟。
编辑:使用ListView
解决我的问题的
jewelsea的建议。然而,我仍然好奇为什么使用ScrollPane
没有那么好。另外,我遇到了ListView
实现中奇怪的行为:我使用一个按钮手动将新的Label
添加到视图。无论何时,添加新的Label
后,视图都会冻结。在更新滚动位置或显示新添加的Label
之前,它会锁定几秒钟。我不知道这是否是因为视图管理大约20个左右的实例,或者是否有更危险的事情发挥作用。
任何不使用'ListView'来实现的理由?我认为这可能会为您解决这些问题。 – jewelsea
@jewelsea,你解决了它!我总是惊讶于大多数这些问题看起来如此之大,但他们的解决方案如此简单。我能够使用'ListView