如何创建同一对象的副本(例如标签)?
How to create copies of the same object (e.g Label)?
我想将 Label
的副本添加到 Pane
。
Timeline timer = new Timeline(
new KeyFrame(Duration.millis(1000),
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
Label egg_new = new Label();
egg_new = egg;
getChildren().add(egg_new);
}
}));
timer.setCycleCount(Timeline.INDEFINITE);
timer.play();
它给我一个错误,因为我无法将相同的对象添加到 Pane
。如何制作 egg
的副本?我的标签基本上包含一个鸡蛋图标,假设我的目标是创建一个新的鸡蛋图标副本并每秒将其添加到 Pane
。
我尝试复制 egg
的图像并将其设置为 egg_new
,但是 egg
然后就消失了。我是这样做的:
Label egg_new = new Label();
ImageView egg_new_img = egg_img;
egg_new.setGraphic(egg_new_img);
getChildren().add(egg_new);
编写一个方法来创建Label
,并在需要时调用它。这样您就可以确保每次都以相同的方式创建标签。
注意没有Node
子类实例可以在场景图中多次出现,所以如果你想要“相同”Label
你需要每次都创建一个新的Label
, 并以同样的方式创建它。类似地,如果 Label
有一个 graphic
集,则每次都需要为 graphic
创建一个新的 Node
(例如 ImageView
)。
private Image eggImage = ... ;
private Label createEggLabel() {
Label eggLabel = new Label();
ImageView eggImg = new ImageView(eggImage);
eggLabel.setGraphic(eggImg);
return eggLabel ;
}
然后
Timeline timer = new Timeline(
new KeyFrame(Duration.millis(1000),
event -> getChildren().add(createEggLabel())));
timer.setCycleCount(Timeline.INDEFINITE);
timer.play();
我想将 Label
的副本添加到 Pane
。
Timeline timer = new Timeline(
new KeyFrame(Duration.millis(1000),
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
Label egg_new = new Label();
egg_new = egg;
getChildren().add(egg_new);
}
}));
timer.setCycleCount(Timeline.INDEFINITE);
timer.play();
它给我一个错误,因为我无法将相同的对象添加到 Pane
。如何制作 egg
的副本?我的标签基本上包含一个鸡蛋图标,假设我的目标是创建一个新的鸡蛋图标副本并每秒将其添加到 Pane
。
我尝试复制 egg
的图像并将其设置为 egg_new
,但是 egg
然后就消失了。我是这样做的:
Label egg_new = new Label();
ImageView egg_new_img = egg_img;
egg_new.setGraphic(egg_new_img);
getChildren().add(egg_new);
编写一个方法来创建Label
,并在需要时调用它。这样您就可以确保每次都以相同的方式创建标签。
注意没有Node
子类实例可以在场景图中多次出现,所以如果你想要“相同”Label
你需要每次都创建一个新的Label
, 并以同样的方式创建它。类似地,如果 Label
有一个 graphic
集,则每次都需要为 graphic
创建一个新的 Node
(例如 ImageView
)。
private Image eggImage = ... ;
private Label createEggLabel() {
Label eggLabel = new Label();
ImageView eggImg = new ImageView(eggImage);
eggLabel.setGraphic(eggImg);
return eggLabel ;
}
然后
Timeline timer = new Timeline(
new KeyFrame(Duration.millis(1000),
event -> getChildren().add(createEggLabel())));
timer.setCycleCount(Timeline.INDEFINITE);
timer.play();