0
我正在嘗試使用兩個for循環來自動將ImageView節點添加到每個位置。當使用for循環時,我收到一個錯誤。當我僅用一條語句添加ImageView節點來註釋for循環代碼時,代碼似乎可以工作,您可以使用for循環來填充GridPane?如果是這樣我做錯了什麼?如果沒有什麼可以用作解決方案?JavaFX - 在GridPane中使用for循環?
我的班級:
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'。第二種解決方案的工作原理是爲網格上的每個單元格創建一個新的圖像視圖。 – 2014-12-07 02:01:09
我想重新使用圖像並將其添加到每個gridPane是他們的任何解決方案嗎? – leftlopez 2014-12-07 03:26:52
由於FX節點只能在父節點上進行,並且只允許向該父節點添加一次,因此每次要在網格中掃描該圖像時都必須創建一個新的ImageView()。它不會複製eimage本身,只複製視圖的JavaFX容器/控件。 – 2014-12-07 10:34:54