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

时间:2015-04-11 11:31:26

标签: javafx constraints javafx-8 scenebuilder

我为可能很蹩脚的问题道歉,但我是JavaFX的新手,在阅读了4篇教程之后,我找不到有关约束如何工作的明确信息。

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

enter image description here

<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>

有趣的是,当我调整窗口大小时,inner-pane会变宽,但边缘不会。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

考虑到您使用的是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>