2013-10-27 200 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