2016-02-15 101 views
2

我有一個很多控件(標籤,Textfields,Comboboxes和複選框)的GUI。我將它們組織在一個Gridpane中,並希望將它們放在行和列中(例如,它是用於Gridpane佈局的)。JavaFX:使用FXML在行(在gridpane中)組織控件

如果我使用FXML我寫這樣的:

<GridPane> 
    <Label GridPane.rowIndex="0" GridPane.columnIndex="0" text="field1"/> 
    <TextField GridPane.rowIndex="0" GridPane.columnIndex="1"/> 
    <Label GridPane.rowIndex="1" GridPane.columnIndex="0" text="field2"/> 
    <TextField GridPane.rowIndex="1" GridPane.columnIndex="1"/> 
</GridPane> 

現在的問題:如果我想補充行0和1之間的行,我需要增加以下行的行索引。現在讓我們取20行和5列,我想在第一行之後添加一行。這對我來說會增加低於第一行的每行的排行數。

有沒有像行元素一樣,它的子控件在同一行中的位置隨着列數的增加而變化?我覺得是這樣的:

<GridPane> 
    <GridPane.Row> 
     <Label text="field1"/> 
     <TextField/> 
    </GridPane.Row> 
    <GridPane.Row> 
     <Label text="field2"/> 
     <TextField/> 
    </GridPane.Row> 
</GridPane> 

我知道垂直框中,然後HBox中,這幾乎是我想要的,但我想在列的元素固定寬度。

+0

雖然我沒有回答你的問題,你有沒有考慮過使用'SceneBuilder'? –

+0

感謝您的建議。事實上,我已經嘗試過,但發現它太慢了很多元素。另外,處理有時非常困難。但是,不幸的是我停止了任何JavaFX開發,可能會幫助重新編號行 – user1571117

回答

4

您可以使用一個對象來跟蹤rowIndex

的Java:

public class RowCounter { 
    private int currentRowIndex = 0; 

    /** 
    * Return current rowIndex. 
    * @return 
    */ 
    public int getCr() { 
     return currentRowIndex; 
    } 

    /** 
    * Return current rowIndex and increase it. 
    * @return 
    */ 
    public int getNr() { 
     return currentRowIndex++; 
    } 
} 

FXML:

<GridPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <fx:define> 
     <RowCounter fx:id="rc" /> 
    </fx:define> 

    <children> 
     <Label text="Name:" GridPane.columnIndex="0" GridPane.rowIndex="$rc.cr" /> 
     <TextField GridPane.columnIndex="1" GridPane.rowIndex="$rc.nr" /> 

     <Label text="Age:" GridPane.columnIndex="0" GridPane.rowIndex="$rc.cr" /> 
     <TextField GridPane.columnIndex="1" GridPane.rowIndex="$rc.nr" /> 

     <Label text="Address:" GridPane.columnIndex="0" GridPane.rowIndex="$rc.cr" /> 
     <TextField GridPane.columnIndex="1" GridPane.rowIndex="$rc.nr" /> 
    </children> 
</GridPane> 
+0

。在互聯網上大量閱讀後,我發現沒有合適的解決方案,但這裏可以工作。我會接受你的答案,因爲它聽起來最有前途。謝謝,我會考慮它,如果我再次開發JavaFX :) – user1571117

+0

它的工作原理,但不要忘記添加RowCounter的導入:) – bamboofighter