2017-10-11 51 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方法中是有意義的。