我在我的CustomList中有一个CustomList来强制选择而不是滚动,并且需要在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);
}
}
}我怎么才能解决呢?
谢谢
发布于 2014-02-01 10:30:55
根据你的部分代码;
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();
}};
https://stackoverflow.com/questions/21476244
复制相似问题