我的CustomList中有一个EventFilter来强制选择而不是滚动,并且需要在listView加载后将ScrollBar放在顶部。但是当加载后执行scrollToTop方法时,ScrollBar不再移动并保持在顶部。
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();
}
};
scrollToTop方法:
public void scrollToTop() {
Node n = lookup(".scroll-bar");
if (n instanceof ScrollBar) {
final ScrollBar bar = (ScrollBar) n;
if (bar.getOrientation().equals(Orientation.VERTICAL)) {
bar.setValue(0.5);
}
}
}
我该如何解决?
由于
答案 0 :(得分:1)
根据您的部分代码;
1)由于滚动条的默认最大值和最小值分别为1.0和0.0,因此scrollToTop方法不会滚动到顶部。因为您将滚动条的值设置为0.5,这意味着加载ListView的“滚动到中心”。
2)附加eventHandler后,滚动条将不再移动,因为事件处理程序使用了ScrollEvent
。 scrollBar不会通过鼠标滚轮移动,但会通过鼠标拖动滚动。
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();
}
};