首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX - ListView ScrollBar EventFilter和scrollToTop

JavaFX - ListView ScrollBar EventFilter和scrollToTop
EN

Stack Overflow用户
提问于 2014-01-31 09:18:01
回答 1查看 1.2K关注 0票数 0

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

EventFilter:

代码语言:javascript
复制
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方法:

代码语言:javascript
复制
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);
    }
  }
}

我怎么才能解决呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-01 10:30:55

根据你的部分代码;

1)由于滚动条的缺省最大值和最小值分别为1.0和0.0,因此scrollToTop方法没有滚动到顶部。因为在其中将滚动条的值设置为0.5,这意味着加载ListView的“滚动到中心”。

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

3)建议采用ListView.scrollTo()方法:

代码语言:javascript
复制
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();
  }

};

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21476244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档