You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于FXML的TableView分页控制器实现方案咨询

基于FXML的TableView分页实现方案

场景说明

已通过FXML将自定义FitWidthTableView嵌套进Pagination组件,现有控制器结构包含Spring注入的OutputDataRepository,需要实现总页数计算、每页数据量设置、分页数据填充的完整逻辑。


实现步骤及代码示例

1. 定义分页参数常量

在控制器中添加固定的分页配置常量,可根据业务需求调整:

// 每页显示的数据条数
private static final int PAGE_SIZE = 20;
// 总数据量缓存
private long totalItems;

2. 完整控制器实现代码

public class DataViewerController implements Initializable {

    @FXML
    private Pagination pagination;

    @FXML
    private FitWidthTableView<OutputData> dataDisplayView;

    @FXML
    private TableColumn<OutputData, Integer> rowColumn;

    @Autowired
    private OutputDataRepository outputDataRepository;

    private static final int PAGE_SIZE = 20;
    private long totalItems;

    @Override
    public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
        // 初始化行号列的映射逻辑
        bindRowColumnValue();

        // 计算总数据量与总页数
        totalItems = outputDataRepository.count();
        int totalPages = (int) Math.ceil((double) totalItems / PAGE_SIZE);
        
        // 配置分页组件
        pagination.setPageCount(totalPages);
        pagination.setPageFactory(this::loadPageData);

        // 默认加载第一页数据
        loadPageData(0);
    }

    // 绑定行号列的动态计算逻辑
    private void bindRowColumnValue() {
        rowColumn.setCellValueFactory(cellData -> new SimpleIntegerProperty(
            pagination.getCurrentPageIndex() * PAGE_SIZE + cellData.getIndex() + 1
        ).asObject());
    }

    // 分页数据加载工厂方法
    private Node loadPageData(int pageIndex) {
        // 构造分页请求(Spring Data JPA规范,pageIndex从0开始)
        Pageable pageable = PageRequest.of(pageIndex, PAGE_SIZE);
        Page<OutputData> currentPage = outputDataRepository.findAll(pageable);

        // 将当前页数据设置到表格
        dataDisplayView.setItems(FXCollections.observableArrayList(currentPage.getContent()));

        // 切换页后重新绑定行号计算规则
        bindRowColumnValue();

        return dataDisplayView;
    }
}

3. 关键注意事项

  • 确保OutputDataRepository继承自Spring Data JPA的PagingAndSortingRepository或JpaRepository,否则无法直接使用count()和findAll(Pageable)方法。
  • 若需要对数据排序,可修改PageRequest构造参数:PageRequest.of(pageIndex, PAGE_SIZE, Sort.by("id").ascending())。
  • FXML中的Pagination组件无需额外布局配置,页工厂会自动返回TableView作为当前页的展示内容。

内容的提问来源于stack exchange,提问作者vic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:10:31