2017-10-11 25 views

回答

1

据我所知,Label没有实现Java Cloneable接口,所以没有任何内置的方式来深拷贝自己,也没有Node

你可以创建自己的类延伸Label并实现Cloneable并在该类覆盖clone方法,并做了所有其他Node要深拷贝为好,这是最强大的解决方案,但它可能比你需要的更多。

另一种选择是只创建一个新的标签具有相同的属性,这可能是因为像

Label newLabel = new Label(oldLabel.getText(), oldLabel.getGraphic()); 

注意,你可能有问题,该方法简单,因为它不是一个true深层复制,newLabel和oldLabel现在引用相同的图形节点,同样,您可能在向场景中添加同一个图形节点两次时出现问题。一个更好的副本可能会做这样的事情

ImageView oldGraphic = (ImageView) oldLabel.getGraphic(); 
Label newLabel = new Label(oldLabel.getText(), new ImageView(oldGraphic.getImage()); 

这仍然不是一个真正的深层副本,但没有任何规则对添加相同Image现场多次如你所愿,让你的安全有。这种方法对于标签来说很好,它只有两行(它可以折叠成一个,但我更加易读),但对于更复杂的节点类型可能会非常麻烦。如果只是标签,这是一个好的解决方案,否则将所有需要的复制封装到新的clone方法中是有意义的。