【发布时间】:2014-12-07 01:22:37
【问题描述】:
我正在尝试使用两个 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。第二种解决方案有效,因为您为网格上的每个单元格创建一个新的图像视图。 -
我想重用图像并将其添加到每个 gridPane 是他们对此的任何解决方案吗?
-
由于 FX 节点只能在父节点上,并且只允许添加到该父节点一次,因此每次要在网格中显示该图像时,您都必须创建一个新的 ImageView()。它不会复制 eimage 本身,只会复制视图的 JavaFX 容器/控件。
标签: java for-loop javafx gridpane