JavaFX-ListView滚动条事件过滤器和滚动按钮

JavaFX-ListView滚动条事件过滤器和滚动按钮,listview,events,javafx,scrollbar,Listview,Events,Javafx,Scrollbar,在我的CustomList中有一个EventFilter,用于强制选择而不是滚动,并且需要在加载listView后将滚动条置于顶部。但是当方法scrollToTop在加载后执行时,滚动条不再移动并保持在顶部 EventFilter: private final EventHandler<ScrollEvent> scrollEventFilter = new EventHandler<ScrollEvent>() { @Override public void handl

在我的CustomList中有一个EventFilter,用于强制选择而不是滚动,并且需要在加载listView后将滚动条置于顶部。但是当方法scrollToTop在加载后执行时,滚动条不再移动并保持在顶部

EventFilter:

private final EventHandler<ScrollEvent> scrollEventFilter = new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent t) {
    if (t.getDeltaY() < 0) {
        getSelectionModel().selectNext();
    } else {
        getSelectionModel().selectPrevious();
    }

    t.consume();
  }
};
我怎样才能解决这个问题


根据您的部分代码,谢谢

1) 由于scrollbar的默认最大值和最小值分别为1.0和0.0,因此scrollToTop方法不会滚动到顶部。因为您正在将滚动条的值设置为0.5,这意味着加载的ListView的“滚动到中心”

2) 附加eventHandler后,滚动条将不再移动,因为事件处理程序使用
ScrollEvent
。滚动条不会通过鼠标滚轮移动,但会通过鼠标拖动滚动条

3) 我建议使用
ListView.scrollTo()
方法如下:

private final EventHandler<ScrollEvent> scrollEventFilter = new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent t) {
    if (t.getDeltaY() < 0) {
        getSelectionModel().selectNext();
    } else {
        getSelectionModel().selectPrevious();
    }

    scrollTo(lst.getSelectionModel().getSelectedIndex());

    t.consume();
  }
private final EventHandler scrollEventFilter=new EventHandler(){
@凌驾
公共无效句柄(ScrollEvent t){
if(t.getDeltaY()<0){
getSelectionModel().selectNext();
}否则{
getSelectionModel().selectPrevious();
}
滚动到(lst.getSelectionModel().getSelectedIndex());
t、 消费();
}
})

private final EventHandler<ScrollEvent> scrollEventFilter = new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent t) {
    if (t.getDeltaY() < 0) {
        getSelectionModel().selectNext();
    } else {
        getSelectionModel().selectPrevious();
    }

    scrollTo(lst.getSelectionModel().getSelectedIndex());

    t.consume();
  }