2015-06-10 32 views
0

我已經在Java FXML文件中定義的網格窗格如下:如何訪問網格窗格中的控件?

<GridPane fx:id="grid" gridLinesVisible="true" prefHeight="256" prefWidth="256"> 

    ... 

    <children> 
    <Label maxHeight="1.8" maxWidth="1.8" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.columnIndex="1" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.columnIndex="2" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.rowIndex="1" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.columnIndex="1" GridPane.rowIndex="1" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.columnIndex="2" GridPane.rowIndex="1" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.rowIndex="2" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.columnIndex="1" GridPane.rowIndex="2" /> 
    <Label maxHeight="1.8" maxWidth="1.8" GridPane.columnIndex="2" GridPane.rowIndex="2" /> 
    </children> 

    ... 

</GridPane> 

網格是3×3,並且具有在它的每一個單元的標籤。是否有可能遍歷網格和改變每個標籤中的文本,如下面的僞代碼所示:

for (cell : grid) 
{ 
    cell.label.setText("x"); 
} 

回答

1

可以是

for (Node node : gridPane.getChildren()) 
{ 
    ((Label) node).setText("x"); 
} 

假設gridPane.setGridLinesVisible(false);

然而,當gridPane.setGridLinesVisible(true),額外的gridLines(類型Group)被添加到gridPane的子列表中。在這種情況下,你可以檢查類類型:

for (Node node : gridPane.getChildren()) 
{ 
    if(node instanceof Label) 
     ((Label) node).setText("x"); 
} 

注意,gridLinesVisible財產僅用於調試目的。還有其他選項可以用於GridPane的樣式。

+0

這樣做的工作,謝謝! – 5had3sofQu4rtz

+0

是否可以在不隱藏網格線的情況下執行此操作? – 5had3sofQu4rtz

+0

@ 5had3sofQu4rtz請參閱編輯。 –