我可以对任何元素使用约束吗?
Can I use constraints with any element?
对于这个可能很蹩脚的问题,我深表歉意,但我是 JavaFX 的新手,在阅读了 4 篇教程后,我找不到关于约束如何工作的明确信息。
我可以为任何控件设置约束吗?这就是我想要实现的目标。我有 VBox
和 ButtonBar
的固定高度,我希望第二个控件在我调整 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>
对于这个可能很蹩脚的问题,我深表歉意,但我是 JavaFX 的新手,在阅读了 4 篇教程后,我找不到关于约束如何工作的明确信息。
我可以为任何控件设置约束吗?这就是我想要实现的目标。我有 VBox
和 ButtonBar
的固定高度,我希望第二个控件在我调整 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>