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

JavaFX子容器最大化无法占满可用空间问题求助

解决JavaFX子容器无法填充BorderPane中心区域的问题

问题根源

你的子容器GridPane设置了maxHeight="-Infinity"和maxWidth="-Infinity",这会强制它只能保持预设的prefHeight和prefWidth,无法随父容器的大小变化扩展。同时GridPane的列、行约束以及内部TableView的尺寸配置也需要调整,才能充分利用可用空间。

修改步骤

1. 修正子容器GridPane的尺寸约束

移除maxHeight="-Infinity"和maxWidth="-Infinity"(JavaFX容器默认最大尺寸为无限大),或显式设置为允许无限扩展:

<!-- 替换原GridPane开头标签 -->
<GridPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="500.0" 
          xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1">

2. 优化GridPane的布局约束

  • 将列约束的hgrow改为ALWAYS,让列自动填充宽度
  • 将TableView所在行的vgrow改为ALWAYS,让行自动填充高度
<columnConstraints>
    <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
    <RowConstraints maxHeight="264.00000915527346" minHeight="10.0" prefHeight="113.20000610351562" vgrow="SOMETIMES" />
    <RowConstraints maxHeight="225.00000610351563" minHeight="10.0" prefHeight="36.79998779296875" vgrow="SOMETIMES" />
    <!-- 修改此行的vgrow为ALWAYS -->
    <RowConstraints maxHeight="183.60001525878909" minHeight="22.39996337890625" prefHeight="136.00001220703123" vgrow="ALWAYS" />
    <RowConstraints maxHeight="124.00002441406252" minHeight="10.0" prefHeight="113.60000000000002" vgrow="SOMETIMES" />
</rowConstraints>

3. 调整TableView的尺寸配置

移除TableView的固定prefHeight和prefWidth,设置其允许无限扩展:

<TableView maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" GridPane.rowIndex="2">

4. 控制器加载逻辑确认

确保加载子容器时直接将其设置为BorderPane的中心节点,无需额外固定尺寸:

public void getHome(ActionEvent event) throws IOException {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("home.fxml"));
    GridPane homePane = loader.load();
    borderPane.setCenter(homePane);
}

修改后的完整子容器代码

<GridPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="500.0" 
          xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1">
  <columnConstraints>
    <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints maxHeight="264.00000915527346" minHeight="10.0" prefHeight="113.20000610351562" vgrow="SOMETIMES" />
    <RowConstraints maxHeight="225.00000610351563" minHeight="10.0" prefHeight="36.79998779296875" vgrow="SOMETIMES" />
    <RowConstraints maxHeight="183.60001525878909" minHeight="22.39996337890625" prefHeight="136.00001220703123" vgrow="ALWAYS" />
    <RowConstraints maxHeight="124.00002441406252" minHeight="10.0" prefHeight="113.60000000000002" vgrow="SOMETIMES" />
  </rowConstraints>
   <children>
      <TableView maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" GridPane.rowIndex="2">
        <columns>
            <TableColumn maxWidth="42.0" prefWidth="42.0" resizable="false" text="Sr.No" />
            <TableColumn prefWidth="85.5999755859375" text="HSN/SAC" />
          <TableColumn prefWidth="75.0" text="pID" />
          <TableColumn prefWidth="75.0" text="ProductName" />
            <TableColumn prefWidth="75.0" text="Wt/Ps" />
            <TableColumn prefWidth="75.0" text="Qty" />
            <TableColumn prefWidth="75.0" text="Rate" />
            <TableColumn prefWidth="75.0" text="TaxableAmt" />
            <TableColumn prefWidth="75.0" text="GST">
               <columns>
                  <TableColumn maxWidth="40.0" minWidth="40.0" prefWidth="40.0" resizable="false" text="%" />
                  <TableColumn prefWidth="75.0" text="Amt" />
               </columns>
            </TableColumn>
            <TableColumn prefWidth="75.0" text="Total" />
        </columns>
         <columnResizePolicy>
            <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
         </columnResizePolicy>
      </TableView>
   </children>
</GridPane>

额外说明

主容器中的BorderPane已经通过AnchorPane.bottomAnchor="0.0"等属性正确锚定,能随窗口大小变化,只要子容器的尺寸约束调整正确,就能自动填充BorderPane的中心区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:38:10