如何创建同一对象的副本(例如标签)?

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();