正如标题所说。如何找出用户在javafx中滚动到列表视图的末尾。
答案 0 :(得分:1)
在我的评论中详细说明一下:看看API我的第一个冲动就是在到达末尾时使用list和doStuff()注册一个onScrollTo处理程序,比如
list.setOnScrollTo(e -> {
if (e.getScrollTarget() >= list.getItems().size() -1) {
doStuff();
}
});
不幸的是,这不起作用:如果方法list.scrollTo(int)
或list.scrollTo(T)
中的任何一个,则处理程序仅被称为 。这已经记录了 - 但是我们不会想到我们需要它的任何用例吗?
这留下了肮脏的ol'从列表的子项中挖掘ScrollBar并聆听其value属性(注意:在安装外观之后需要进行挖掘工作!)。
一个简单的例子:
public class ScrollToHandlerList extends Application {
private final ObservableList<Locale> data =
FXCollections.observableArrayList(Locale.getAvailableLocales());
private final ListView<Locale> list = new ListView<>(data);
@Override
public void start(Stage stage) {
stage.setTitle("List ScrollTo Handler " + FXUtils.version());
Button leftScrollTo = new Button("scrollto last");
leftScrollTo.setOnAction(e -> {
// explicit calling notifies the onScrollHandler
list.scrollTo(list.getItems().size() -1);
});
// Would expect a onScrollTo handler getting notified
// but isn't ...
list.setOnScrollTo(e -> {
LOG.info("target/size" + e.getScrollTarget() + " / " + data.size());
});
// nor a onScroll handler ...
list.setOnScroll(e -> {
LOG.info("" + e);
});
HBox root = new HBox(leftScrollTo, list);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
// dirty: lookup the scrollBar and listener to its value property
ScrollBar bar = (ScrollBar) list.lookup(".scroll-bar");
bar.valueProperty().addListener((src, ov, nv) -> {
LOG.info("change on value " + nv);
if (nv.doubleValue() == 1.) {
LOG.info("at max");
}
});
}
public static void main(String[] args) {
launch(args);
}
@SuppressWarnings("unused")
private static final Logger LOG = Logger.getLogger(ScrollToHandlerList.class
.getName());
}
更新
通过twitter获取更多信息: