我正在寻找一种方法来说,在FXML中设置maxWidth大小为80%。如何使用FXML指定JavaFX 2中的宽度百分比?
很像网页开发。
<VBox fx:id="testVB" prefWidth="600">
但这并不:
<VBox fx:id="testVB" prefWidth="80%">
我知道,在直JavaFX2非FXML您可以创建插图?在FMXL的代码之外做这件事的最好方法是什么?
谢谢!
Riley
我正在寻找一种方法来说,在FXML中设置maxWidth大小为80%。如何使用FXML指定JavaFX 2中的宽度百分比?
很像网页开发。
<VBox fx:id="testVB" prefWidth="600">
但这并不:
<VBox fx:id="testVB" prefWidth="80%">
我知道,在直JavaFX2非FXML您可以创建插图?在FMXL的代码之外做这件事的最好方法是什么?
谢谢!
Riley
我不确定你可以。您需要使用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>
此代码定义一个GridPane
用的80%的宽度的第一列。 TitledPane
设置在此GridPane
第一列的第一个单元格中,并且可以(因为您需要确定TitledPane
的宽度限制符合您的需要)占据GridPane
宽度的80%。
请注意,我删除了与您的问题无关的所有信息。顺便说一下,Oracle的Scene Builder工具对于定义复杂的FXML布局非常有用。
你可以模拟它 - 一个基本的例子,模拟HBox中两个cols的50%。您可以添加虚拟窗格获得三分之一等。
HBox {
VBox {
static hgrow : "ALWAYS",
Label {
text : "Privacy",
alignment : "CENTER",
styleClass : ["h2", "heading"]
}
},
VBox {
static hgrow : "ALWAYS",
Label {
text : "Messages",
alignment : "CENTER",
styleClass : ["h2", "heading"]
},
Label {text:""}
}
}
我应该注意到,使用“有时”并使用pref/min/max宽度值也可能有帮助。尽管如此,我仍然喜欢真正的%值。 – 2015-02-04 23:24:24
看起来好像很多答案已经提供,他们应该工作。 然而,有设置百分比的方式:
<fx:define>
<Screen fx:factory="getPrimary" fx:id="screen" />
</fx:define>
这将帮助您检测当前屏幕的尺寸,在显示上的应用。现在,我们已经显示维度,我们可以用它在FXML发挥如下:
<HBox fx:id="hroot" prefHeight="${screen.visualBounds.height}" prefWidth="${screen.visualBounds.width}"> Your FXML elements inside the root... </HBox>
请注意,我用visualBounds,因为这将让我在屏幕上的可用空间,因为我不例如,希望与Windows中的任务栏重叠。对于全屏应用程序,您只需使用“边界”。
现在,为了达到使用百分比的目的,您实际上可以使用prefheight和prefWidth的值。您可以将计算放入$ {}。
可选:
如果你想要把所有的元素使用相对大小,只是指他们,用他们的ID和宽度或高度属性,让你的计算。
<VBox fx:id="VBSidebar" prefWidth="${hroot.width*0.15}" prefHeight="${hroot.height}"> more elements.. </VBox>
希望这会有所帮助!
如何在SceneBuilder中设置列约束?我使用的是SceneBuilder 8.1.1,我有一个带有两列的GridPane,并且我无法在任何地方找到列约束或percentWidth。 – skrilmps 2017-10-18 15:20:10