ListView 自动滚动仅在手动滚动到底部一次时有效
ListView auto-scroll only working when manually scrolled to the bottom once
我对 JavaFX ListView 组件进行了扩展:
HL7ListView extends ListView<String>
目标是在添加新项目时自动滚动父 ScrollPane。我有一个将有问题的 ScrollPane 作为参数的构造函数,我制作了一个 addItem() 方法,如下所示:
public void addItem(String item)
{
List<String> items = getItems();
items.add(item);
scrollTo(items.size());
scrollPane.setVvalue(1.0);
}
自动滚动只有在我手动滚动到底部一次到 "get it going" 时才有效(如果这有意义的话)。一旦它滚动到底部,新项目就会按预期运行,并且滚动条会自动向下移动,跟随 ListView 的内容。不确定这里可能是什么问题,显然滚动条只在需要时出现,不确定是否与此有关。
有什么想法吗?
我认为您不需要将 ListView
与父 ScrollPane
包装起来,因为 ListView 具有内置滚动条。您可以使用 scrollTo() 直接滚动到最后一个索引。
ListView<String> listView = new ListView<>();
listView.getItems().addAll(items);
listView.scrollTo(listView.getItems().size() - 1);
编辑
使用 super.scrollTo
而不是 this.scrollTo
似乎也适用于您的扩展 (HL7ListView
),
class HL7ListView extends ListView<String> {
public HL7ListView() {
}
public HL7ListView(List<String> items) {
this.getItems().addAll(items);
super.scrollTo(getItems().size() - 1);
}
public void addItem(String item) {
this.getItems().add(item);
super.scrollTo(getItems().size() - 1);
}
}
PS: I tried to wrap with ScrollPane as your approach and went through this QA - and that's not working, it seems kinda bug.
我对 JavaFX ListView 组件进行了扩展:
HL7ListView extends ListView<String>
目标是在添加新项目时自动滚动父 ScrollPane。我有一个将有问题的 ScrollPane 作为参数的构造函数,我制作了一个 addItem() 方法,如下所示:
public void addItem(String item)
{
List<String> items = getItems();
items.add(item);
scrollTo(items.size());
scrollPane.setVvalue(1.0);
}
自动滚动只有在我手动滚动到底部一次到 "get it going" 时才有效(如果这有意义的话)。一旦它滚动到底部,新项目就会按预期运行,并且滚动条会自动向下移动,跟随 ListView 的内容。不确定这里可能是什么问题,显然滚动条只在需要时出现,不确定是否与此有关。
有什么想法吗?
我认为您不需要将 ListView
与父 ScrollPane
包装起来,因为 ListView 具有内置滚动条。您可以使用 scrollTo() 直接滚动到最后一个索引。
ListView<String> listView = new ListView<>();
listView.getItems().addAll(items);
listView.scrollTo(listView.getItems().size() - 1);
编辑
使用 super.scrollTo
而不是 this.scrollTo
似乎也适用于您的扩展 (HL7ListView
),
class HL7ListView extends ListView<String> {
public HL7ListView() {
}
public HL7ListView(List<String> items) {
this.getItems().addAll(items);
super.scrollTo(getItems().size() - 1);
}
public void addItem(String item) {
this.getItems().add(item);
super.scrollTo(getItems().size() - 1);
}
}
PS: I tried to wrap with ScrollPane as your approach and went through this QA - and that's not working, it seems kinda bug.