Я пытаюсь использовать два цикла for для автоматического добавления узлов ImageView в каждое место. При использовании цикла for я получаю сообщение об ошибке. Когда я комментирую код цикла for с помощью только одного оператора для добавления узла ImageView, код, похоже, работает. Можете ли вы использовать циклы for для заполнения GridPane? Если да, то что я делаю неправильно? Если нет, что можно использовать в качестве решения?
Мои занятия:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class GridCreation extends Application {
@Override
public void start(Stage gameStage) throws Exception {
GridPane grid = new GridPane();
Image backOfCardsImg = new Image("images/naruto_shipuden_logo.png");
ImageView backOfCards = new ImageView(backOfCardsImg);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
grid.add(backOfCards, i, j);
}
}
//grid.add(backOfCards, 1,1);
Scene scene = new Scene(grid);
gameStage.setTitle("MemoryGame");
gameStage.setScene(scene);
gameStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Изменить: для кода:
grid.add(backOfCards, i, j);
Я изменил строку кода на
grid.add(new ImageView(backOfCardImg), i, j);
это, казалось, решило проблему, но может ли кто-нибудь объяснить мне, почему первый вариант не работает?
ImageView
— этоNode
, и вы не можете использовать его повторно, иначе вы получите следующее исключение:Children: duplicate children added
. Второе решение работает, потому что вы создаете одно новое изображение для каждой ячейки сетки. - person José Pereda   schedule 07.12.2014