Javafx:通过拖动复制节点并将其复制并粘贴到窗格中的位置来复制节点
问题描述:
是否可以深度复制Label
(或任何其他节点),以便创建具有相同属性值的新对象Label
然后把它放在Dragboard
?Javafx:通过拖动复制节点并将其复制并粘贴到窗格中的位置来复制节点
我想实现此功能:将标签拖放到Pane
中的某个位置。具有相同属性值的新对象Label
在窗格位置的窗格中创建。
答
据我所知,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
方法中是有意义的。