JavaFX 如何以编程方式更改 GridPane 行高

标签 javafx javafx-2 fxml

我有一个问题困扰了我好几天。

我有一个 GridPane,当我点击一个按钮时,我想隐藏第一行。
这是 FXML 文件

<VBox prefHeight="200.0" prefWidth="100.0">
<children>
 <Button fx:id="buttonTest" mnemonicParsing="false" onAction="#handleButtonTestAction" text="Button" />
<GridPane fx:id="gridPaneTest" gridLinesVisible="true" layoutX="0.5" layoutY="0.5" BorderPane.alignment="CENTER">
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  </rowConstraints>
  <children>
   <Label fx:id="labelTopLeft" text="top left">
    <font>
     <Font size="15.0" />
    </font>
   </Label>
   <Label fx:id="labelTopRight" text="top right" GridPane.columnIndex="1">
    <font>
     <Font size="15.0" />
    </font>
   </Label>
   <Label text="center left" GridPane.rowIndex="1">
    <font>
     <Font size="15.0" />
    </font>
   </Label>
   <Label text="center right" GridPane.columnIndex="1" GridPane.rowIndex="1">
    <font>
     <Font size="15.0" />
    </font>
   </Label>
   <Label text="bottom left" GridPane.rowIndex="2">
    <font>
     <Font size="15.0" />
    </font>
   </Label>
   <Label text="bottom right" GridPane.columnIndex="1" GridPane.rowIndex="2">
    <font>
     <Font size="15.0" />
    </font>
   </Label>
  </children>
 </GridPane>
</children>
</VBox>


如果我点击按钮,我会这样做

@FXML
public void handleButtonTestAction() {

    labelTopLeft.setVisible(false);
    labelTopRight.setVisible(false);

    gridPaneTest.getRowConstraints().get(0).setMinHeight(0);
    gridPaneTest.getRowConstraints().get(0).setPrefHeight(0);
    gridPaneTest.getRowConstraints().get(0).setMaxHeight(0);
}

单击按钮后,标签按预期不可见,但第一行的高度根本没有变化。
更改行约束后是否必须更新 GridPane 或者还有什么其他事情要做?

谢谢你!

最佳答案

Node.setVisible()只是切换 Node 的可见性状态.

排除 Node从其父布局计算中,您还必须通过调用 Node.setManaged(false) 来设置其托管状态。 .

关于JavaFX 如何以编程方式更改 GridPane 行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317613/

相关文章:

java - 更改水平盒节点位置

java - 使用 JavaFX 制作正方形被子

JavaFX .jar 适用于 Windows 和 OSX,但不适用于 Linux

JavaFX 将数据添加到表中

java - 运行我的应用程序返回 : Javafx. fxml.LoadExeption

JavaFX 自定义 Canvas 节点?

来自 Controller 的 JavaFX 转换场景

java - JNLP 文件和在 Web 浏览器中部署 JavaFX 2.0 应用程序的其他要求

java - 在 JavaFX 中显示复杂的印度孟加拉语字体

binding - 如何处理相关的数据绑定(bind)?