我正在寻找一种方法来说明在FXML中将maxWidth大小设置为80%.
就像在Web开发中一样.
<VBox fx:id="testVB" prefWidth="600">
但这不是:
<VBox fx:id="testVB" prefWidth="80%">
我知道在Straight JavaFX2中非fxml你可以创建insets吗?在FMXL代码之外执行此操作的最佳方法是什么?
谢谢!
浊
Teo*_*ali 24
我不确定你能不能.您需要使用GridPane布局组件.在此组件中,您可以指定行和列约束,在这些约束中,您可以将宽度指定为百分比.例如:
<GridPane>
<children>
<TitledPane text="testGridPane" GridPane.columnIndex="0" GridPane.rowIndex="0" />
</children>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="80.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="20.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
</GridPane>
Run Code Online (Sandbox Code Playgroud)
此代码定义了GridPane第一列,宽度为80%.它TitledPane是在第一列的第一个单元格中设置的GridPane,并且可以(因为你需要确保TitledPane匹配你的需要的宽度约束)占据了宽度的80%GridPane.
请注意,我删除了与您的问题无关的所有信息.顺便说一句,Oracle的Scene Builder工具对于定义复杂的FXML布局非常有用.
小智 9
似乎已经提供了很多答案,它们应该可行.但是,有一种方法可以设置百分比:
<fx:define>
<Screen fx:factory="getPrimary" fx:id="screen" />
</fx:define>
Run Code Online (Sandbox Code Playgroud)
这将帮助您检测当前屏幕的尺寸,正在显示应用程序.现在我们有了显示尺寸,我们可以在FXML中使用它,如下所示:
<HBox fx:id="hroot" prefHeight="${screen.visualBounds.height}" prefWidth="${screen.visualBounds.width}"> Your FXML elements inside the root... </HBox>
Run Code Online (Sandbox Code Playgroud)
请注意,我使用visualBounds,因为这会让我获得屏幕上的可用空间,因为我不希望与Windows中的任务栏重叠.对于全屏应用程序,您只需使用"边界".
现在,为了达到使用百分比的程度,您实际上可以使用prefheight和prefWidth的值.您可以将计算放在$ {}中.
可选:
如果您想让所有元素都使用相对大小,只需使用它们的ID和宽度或高度属性来引用它们,然后进行计算.
<VBox fx:id="VBSidebar" prefWidth="${hroot.width*0.15}" prefHeight="${hroot.height}"> more elements.. </VBox>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!