TableView:当滚动到达表的底部/顶部时得到通知 [英] TableView: Get Notified When Scroll Reaches Bottom/ Top of Table

查看:101
本文介绍了TableView:当滚动到达表的底部/顶部时得到通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以收听滚动事件:

tableView.addEventFilter(javafx.scene.input.ScrollEvent.SCROLL,
        new EventHandler<javafx.scene.input.ScrollEvent>() {
            @Override
            public void handle(final javafx.scene.input.ScrollEvent scrollEvent) {
            System.out.println("Scrolled.");

            }
        });

但是如果到达表格的底部/顶部,我如何得到通知? / strong>

But How can I be notified if the bottom/ top of the table is reached?

推荐答案

这样做的一个简单方法是检索 ScrollBar 使用查找

A simple way of doing this is to retrieve the ScrollBar using a lookup:

ScrollBar tvScrollBar = (ScrollBar) tableView.lookup(".scroll-bar:vertical");

然后你可以添加一个监听器来检查它是否到达底部( ScrollBar 的valueProperty 由滚动的百分比表示,因此 0.0 是顶部和 1.0 是底部):

You can then add a listener to check if it's reached the bottom (the valueProperty of the ScrollBar is represented by the percentage it's been scrolled, so 0.0 is the top and 1.0 is the bottom):

tvScrollBar.valueProperty().addListener((observable, oldValue, newValue) -> {
    if ((Double) newValue == 1.0) {
        System.out.println("Bottom!");
    }
});

下面是一个简单的MCVE,演示了如何将它们放在一起:

Below is a simple MCVE that demonstrates how to put it all together:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ScrollBar;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ScrollBarNotify extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        // Simple interface
        VBox root = new VBox(5);
        root.setPadding(new Insets(10));
        root.setAlignment(Pos.CENTER);

        // Simple TableView to demonstrate
        TableView<String> tableView = new TableView<>();
        TableColumn<String, String> column = new TableColumn<>("Text");
        column.setCellValueFactory(f -> new SimpleStringProperty(f.getValue()));

        tableView.getColumns().add(column);

        // Add some sample items to our TableView
        for (int i = 0; i < 100; i++) {
            tableView.getItems().add("Item #" + i);
        }

        // Now, let's add a listener to the TableView's scrollbar. We can only access the ScrollBar after the Scene is
        // rendered, so we need to do schedule this to run later.
        Platform.runLater(() -> {
            ScrollBar tvScrollBar = (ScrollBar) tableView.lookup(".scroll-bar:vertical");
            tvScrollBar.valueProperty().addListener((observable, oldValue, newValue) -> {
                if ((Double) newValue == 1.0) {
                    System.out.println("Bottom!");
                }
            });

        });

        // Finally, add the TableViewto our layout
        root.getChildren().add(tableView);

        // Show the Stage
        primaryStage.setWidth(300);
        primaryStage.setHeight(300);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}

这篇关于TableView:当滚动到达表的底部/顶部时得到通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆