是否可以深度複製Label
(或任何其他節點),以便創建具有相同屬性值的新對象Label
然後把它放在Dragboard
?Javafx:通過拖動複製節點並將其複製並粘貼到窗格中的位置來複制節點
我想實現此功能:將標籤拖放到Pane
中的某個位置。具有相同屬性值的新對象Label
在窗格位置的窗格中創建。
是否可以深度複製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
方法中是有意義的。