2010-03-18 63 views
1

我有兩個關於java.awt.Shape的問題。假設我有兩個Shape s,shape1shape2java/swing:形狀問題:序列化和組合

  1. 如何以某種方式序列化它們,以便我可以將信息保存到文件中,然後在另一臺計算機上重新創建它? (Shape不是Serializable,但它確實有getPathIterator()方法,好像你可以得到信息,但它會是怎樣的一個阻力+我不知道如何事後重建Shape對象。)

  2. 如何我可以將它們組合成一個新的形狀,以便它們形成一個聯合邊界? (例如,如果shape1是一個大正方形和shape2是正方形內一個小圓圈,我想組合的形狀爲大的正方形的小圓孔)

回答

2

相信可以重建從路徑Shape信息與java.awt.geom.Path2D.Double。但是,它可能不如具體實現那樣高效。

要沒有特殊的工作serialisable從具有Shape作爲現場所有類,那麼你就需要確保所有構造形狀提供Shape S的serialisable子類,即初始化在readObject方法的數據。如果有些情況需要將數據發送給構造函數,那麼您將需要「串行代理」(我認爲在這種情況下這不是必需的)。

將底層模型數據序列化可能會更好。 Shape一般是短暫構建的。

+0

但是,如何將這樣當輸入一個包含樣條或貝塞爾曲線路徑的行爲?它不會被插入並且失去其矢量能力嗎? – Riduidel 2010-03-18 14:51:33

+0

@Riduidel我認爲'getPathIterator(AffineTransform)'返回這些段,但'getPathIterator(AffineTransform,double)'不。我想一般來說'Shape'可能會返回一個近似路徑。 – 2010-03-18 17:22:28

0

我想我找到了一個回答我的問題的第二部分:

Shape shape1, shape2; 
shape1 = ...; 
shape2 = ...; 
Area area = new Area(shape1); 
area.subtract(new Area(shape2)); 
// "area" is now a Shape that is the difference between the two shapes.