[英]Javafx: copy node by dragging it and paste the copy by dropping it to a location in Pane
是否可以深度复制Label
(或任何其他节点),以便创建具有相同属性值的新Label
对象,然后将其放入Dragboard
?
我要实现此功能:将标签拖放到Pane
中的某个位置。 在放置位置的“窗格”中创建一个具有相同属性值的新Label
对象。
据我所知, Label
没有实现Java Cloneable
接口,因此也没有内置的方式来进行深度复制, Node
也没有。
您可以创建自己的类,该类扩展Label
并实现Cloneable
并且在该类中重写clone
方法,并且对希望深层复制的每个其他Node
都这样做,这是最可靠的解决方案,但它可能比您要做的更多需要。
另一个选择是只创建一个具有相同属性的新Label,就像这样简单
Label newLabel = new Label(oldLabel.getText(), oldLabel.getGraphic());
请注意,该方法可能有问题,因为它不是真正的深拷贝,因此newLabel和oldLabel现在引用相同的Graphic Node,这又一次可能会导致您两次将同一Graphic Node添加到场景中。 更好的副本可能会像
ImageView oldGraphic = (ImageView) oldLabel.getGraphic();
Label newLabel = new Label(oldLabel.getText(), new ImageView(oldGraphic.getImage());
这仍然不是真正的深层副本,但是没有规则可以将相同的Image
添加到场景中的次数不限,因此您在这里很安全。 这种方法对于Labels来说很好,它只有两行(它可以折叠成偶数,但我为了提高可读性而去了),但是对于更复杂的节点类型,可能真的很麻烦。 如果只是标签,这是一个好的解决方案,但否则将所有需要的复制封装到新的clone
方法中将是有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.