2015-06-10 4 views
0

Я определил область сетки в файле FXML Java следующим образом:Как я могу получить доступ к элементу управления, находящемуся в области сетки?

<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 см. Править. –

 Смежные вопросы

  • Нет связанных вопросов^_^