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

JavaFX Pagination如何隐藏底部控制面板并让页面占用对应区域

解决方案

你的代码不生效主要是两个问题:

  1. 节点高度设置的方法调用错误:minHeight()、prefHeight()、maxHeight()是获取对应属性值的方法,不是设置方法,需要用setMinHeight()、setPrefHeight()、setMaxHeight()才能修改属性。
  2. 你给天蓝色的pagePane写死了prefHeight为400,就算底部控件栏隐藏,页面区域也不会自动拉伸填充空白。

修改后的可运行代码

package javafxpagination;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Pagination;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TestPagination extends Application {
  public static void main(String[] args) {
    launch(args);
  }

  @Override
  public void start(Stage primaryStage) {
    primaryStage.setTitle("Test pagination");

    Pagination pagination = new Pagination();
    pagination.setPageCount(4);
    pagination.setMaxPageIndicatorCount(4);
    pagination.setCurrentPageIndex(0);

    pagination.setPageFactory((pageIndex) -> {
      Pane pagePane = new Pane();
      pagePane.setPrefWidth(600);
      // 取消固定高度设置,让页面自动填充可用空间
      pagePane.prefHeightProperty().bind(pagination.heightProperty().subtract(40));
      pagePane.setStyle("-fx-background-color: #DDF1F8;"); //天蓝色
      Button button = new Button("Hide/show page buttons");
      button.setOnAction(new EventHandler<ActionEvent>()
      {
        @Override
        public void handle(ActionEvent event)
        {
          Node paginationControl = pagination.lookup(".pagination-control");
          if(paginationControl == null) return;
          boolean isNowVisible = !paginationControl.isVisible();
          paginationControl.setVisible(isNowVisible);
          paginationControl.setManaged(isNowVisible);
          if(isNowVisible){
            // 显示时恢复默认高度
            paginationControl.setMaxHeight(Double.MAX_VALUE);
            paginationControl.setPrefHeight(-1);
            pagePane.prefHeightProperty().bind(pagination.heightProperty().subtract(40));
          }else{
            // 隐藏时高度设为0
            paginationControl.setMinHeight(0);
            paginationControl.setPrefHeight(0);
            paginationControl.setMaxHeight(0);
            // 隐藏控件栏后页面直接占满整个Pagination高度
            pagePane.prefHeightProperty().bind(pagination.heightProperty());
          }
          // 触发Pagination重新布局
          pagination.requestLayout();
        }
      });
      pagePane.getChildren().add(button);
      return pagePane;
    });

    VBox vBox = new VBox(pagination);
    Scene scene = new Scene(vBox, 800, 600);
    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

核心改动说明

  • 修正了paginationControl高度设置的方法调用,隐藏时将最小/首选/最大高度全部设为0,彻底消除控件栏的占位
  • 给pagePane的高度做了动态绑定:控件栏显示时,页面高度减去控件栏的默认高度(约40px);控件栏隐藏时,页面高度直接占满整个Pagination的高度
  • 每次切换显隐后调用pagination.requestLayout()主动触发布局刷新,确保修改立刻生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:54:03