我可以对任何元素使用约束吗?

Can I use constraints with any element?

对于这个可能很蹩脚的问题,我深表歉意,但我是 JavaFX 的新手,在阅读了 4 篇教程后,我找不到关于约束如何工作的明确信息。

我可以为任何控件设置约束吗?这就是我想要实现的目标。我有 VBoxButtonBar 的固定高度,我希望第二个控件在我调整 VBox.

大小时填充剩余区域

<AnchorPane id="main-pane" style="-fx-border-color: #ADFF2F;" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <VBox prefHeight="300.0" prefWidth="400.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <ButtonBar prefHeight="40.0" prefWidth="200.0">
              <buttons>
                <Button mnemonicParsing="false" text="Button" />
                  <Button mnemonicParsing="false" text="Button" />
              </buttons>
            </ButtonBar>
            <AnchorPane id="inner-pane" style="-fx-border-color: #FF0000;">
               <children>
                  <ColorPicker prefHeight="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" />
               </children>
            </AnchorPane>
         </children>
      </VBox>
   </children>
</AnchorPane>

有趣的是,当我调整 window 的大小时,inner-pane 变宽了,但按钮边缘没有。我该如何解决?

考虑到您正在使用 SceneBuilder,您可以执行以下操作:

  • 删除锚定窗格并使 ColorPicker 成为 VBox 的子项。由于 anchorpane 不是您想要实现的完美布局。它允许子节点的边缘锚定到锚窗格边缘的偏移量,但没有 属性 在发生相同情况时强制其增长。

  • ColorPicker 布局属性中 设置 VBox.vgrow="ALWAYS" 和最大高度和最大宽度为 MAX_VALUE

FXML(如果你不使用 SB)

<AnchorPane id="main-pane" style="-fx-border-color: #ADFF2F;" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <VBox prefHeight="300.0" prefWidth="400.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <ButtonBar prefHeight="40.0" prefWidth="200.0">
              <buttons>
                <Button mnemonicParsing="false" text="Button" />
                  <Button mnemonicParsing="false" text="Button" />
              </buttons>
            </ButtonBar>
            <ColorPicker prefHeight="200.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" VBox.vgrow="ALWAYS" />
         </children>
      </VBox>
   </children>
</AnchorPane>