2012-03-23 142 views
8

我正在尋找一種方法來說,在FXML中設置maxWidth大小爲80%。如何使用FXML指定JavaFX 2中的寬度百分比?

很像網頁開發。

<VBox fx:id="testVB" prefWidth="600">

但這並不:
<VBox fx:id="testVB" prefWidth="80%">

我知道,在直JavaFX2非FXML您可以創建插圖?在FMXL的代碼之外做這件事的最好方法是什麼?

謝謝!

Riley

回答

17

我不確定你可以。您需要使用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佈局非常有用。

+0

如何在SceneBuilder中設置列約束?我使用的是SceneBuilder 8.1.1,我有一個帶有兩列的GridPane,並且我無法在任何地方找到列約束或percentWidth。 – skrilmps 2017-10-18 15:20:10

0

你可以模擬它 - 一個基本的例子,模擬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:""} 
     } 
    } 
+0

我應該注意到,使用「有時」並使用pref/min/max寬度值也可能有幫助。儘管如此,我仍然喜歡真正的%值。 – 2015-02-04 23:24:24

6

看起來好像很多答案已經提供,他們應該工作。 然而,有設置百分比的方式:

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

希望這會有所幫助!