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.