我正在尋找一種方法來說,在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