2013-10-27 47 views
2

当试图实现AffineTransform时,我已经得到这个类抛出异常。Java类抛出异常java.awt.geom.Path2D.Double

电话的AffineTransform:

public Shape moveToAndRotate(double x, double y, double theta) 
{ 
    double cx = getBounds2D().getCenterX(); 
    double cy = getBounds2D().getCenterY(); 

    at.translate(cx, cy); 
    at.translate(x, y); 
    at.rotate(Math.toRadians(theta)); 
    at.translate(-cx, -cy); 
    return at.createTransformedShape(yingYang); 
} 

这是驻留在一个自定义形状类(营养土)。

public class YingYang implements Shape 
{ 
    private Area yingYang = new Area(); 
    private AffineTransform at = new AffineTransform(); 
    ... 
} 

当过我打个电话,我得到一类转换异常,当我尝试投无论是从拉丝面板或类是自内这回鹰扬(如果我改变返回类型鹰扬。

我打这个电话是这样的:

YingYang newShape = (YingYang) shape.moveToAndRotate(newLoc1.x, newLoc1.y, theta); 

这是错误:

java.lang.ClassCastException:java.awt.geom.Path2D $双人不能转换到阿尼mation.YingYang

鹰扬以来任何想法实现形状人会认为我不应该在所有施放此。我错过了一个关键概念吗?

+0

构造你忽略了非常重要的位,像at'的'定义和变量'shape'。你需要展示足够的代码才能看到你在做什么。 –

+0

YingYang实现Shape ...但是'createTransformedShape'返回一个Path2D - 也就是说,它不是YingYang实例,而是一个全新的形状对象,与YingYang无关,这就是为什么你不能这样做。 – Ash

+0

请注意错误是什么:您显然正在尝试投射[Path2D.Double](http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Path2D.Double.html )到一个鹰阳,而不是一个到鹰阳的Path2D。 – lealand

回答

2

您正在获得类转换异常,因为您只能继承树继承树。意义阴阳是一种形状,但形状不一定是阴阳。 createTransformedShape正在返回一个Shape2的Path2D。但那形状不是阴阳。你可以保留变量yinYang = new Area();在你的阴阳班内,或者让你的阴阳延伸。

因此,阴阳 - >有一个区域。这将是阴阳 - >是一个区域

如果你真的需要离开扩展继承打开你可以实现的形状并实现所有的方法去阴阳变量。

然后做出类似下面

private class YinYang extends Area { 
    public YinYang(Shape shape) { 
     super(shape); 
    } 
} 

public Shape moveToAndRotate(double x, double y, double theta) 
{ 
    double cx = getBounds2D().getCenterX(); 
    double cy = getBounds2D().getCenterY(); 

    at.translate(cx, cy); 
    at.translate(x, y); 
    at.rotate(Math.toRadians(theta)); 
    at.translate(-cx, -cy); 
    return at.createTransformedShape(yingYang); 
} 

YingYang shape = new YingYang(shape.moveToAndRotate(newLoc1.x, newLoc1.y, theta)); 
+0

因为我现在有一个不同的问题,并且看起来演员问题已解决,所以我将转移到一个新问题。现在我遇到了返回零边界的形状问题。 [(http://stackoverflow.com/questions/19615100/java-call-to-create-new-area-doesnt-create-shape)]问题在这里。 – jbolt