2009-09-06 125 views
1

據我所知,複製JavaFX中的節點應該使用Duplicator.duplicate函數完成。在JavaFX中複製自定義節點

複製節點,其類型包含在JavaFX的庫時,例如

def dup = Duplicator.duplicate(Rectangle{x:30 y:30 width:100 height:100}); 
dup.translateX = 10; 
insert dup into content; 

將插入一個黑色矩形到現場,它工作正常。

但是,如果我以下列方式定義一個新類:

class MyRect extends Rectangle {} 

或者

class MyRect extends CustomNode { 
    override function create() {Rectangle{x:30 y:30 width:10 height:10}} 
} 

它給了我以下運行時錯誤

Type 'javafxapplication1.NumberGrid$MyRect' not found. 

這裏當然javafxapplication1.NumberGrid是該包和檔案MyRect班屬於。

這個人在Sun's forums有同樣的問題,但我沒有看到任何答案。

或者我正在做錯誤的方式,有更好的方法來複制自定義節點?

更新:試圖複製Group工作,但試圖複製Stack產生相同的錯誤。

根據文檔,它應該支持FXD支持的所有類型,包括Node,但也許它只支持一些Node的後代?

+0

沒有答案,但HTTP://forums.sun .com/thread.jspa?forumID = 932&threadID = 5406575是相關的,至少對於Stack的評論。 – PhiLho

回答

0

我知道它的一個老問題,但你有沒有嘗試以下方法?

public class MyRect extends CustomNode, Cloneable { 

    override public function clone(): MyRect { 
     super.clone() as MyRect; 
    } 
    ...  
} 

它通過

var newRect = rect.clone(); 

這是不是一個深拷貝對我的作品(但對我來說,我並不需要這個)