在JavaFX中复制自定义节点

时间:2009-09-06 11:32:55

标签: javafx

据我了解,JavaFX中的节点重复应该使用Duplicator.duplicate函数完成。

在复制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个后代中的一些?

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但您是否尝试了以下内容?

public class MyRect extends CustomNode, Cloneable {

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

通过

对我有用
var newRect = rect.clone();

这不是一个很深的副本(但在我的情况下,我不需要这个)