Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java/swing:形状问题:序列化和组合_Java_Swing_Graphics_Shape - Fatal编程技术网

java/swing:形状问题:序列化和组合

java/swing:形状问题:序列化和组合,java,swing,graphics,shape,Java,Swing,Graphics,Shape,我有两个问题。假设我有两个Shapes、shape1和shape2 如何以某种方式序列化它们,以便将信息保存到文件中,然后在另一台计算机上重新创建?(Shape不可Serializable,但它确实有getPathIterator()方法,似乎可以从中获取信息,但这有点像拖拽+我不确定以后如何重建Shape对象。) 如何将它们组合成一个新的形状,以便它们形成一个连接边界?(例如,如果形状1是一个大正方形,而形状2是正方形内部的一个小圆,则我希望组合的形状是一个带有小圆孔的大正方形) 我相信您可以

我有两个问题。假设我有两个
Shape
s、
shape1
shape2

  • 如何以某种方式序列化它们,以便将信息保存到文件中,然后在另一台计算机上重新创建?(
    Shape
    不可
    Serializable
    ,但它确实有
    getPathIterator()
    方法,似乎可以从中获取信息,但这有点像拖拽+我不确定以后如何重建
    Shape
    对象。)

  • 如何将它们组合成一个新的形状,以便它们形成一个连接边界?(例如,如果形状1是一个大正方形,而形状2是正方形内部的一个小圆,则我希望组合的形状是一个带有小圆孔的大正方形)


  • 我相信您可以使用
    java.awt.geom.Path2D.Double
    从路径信息重构
    形状。但是,它可能没有特定实现那么有效

    要使所有具有
    Shape
    作为字段的类在没有特殊工作的情况下可序列化,则需要确保所有构造的Shape可序列化所提供
    Shape
    s的子类,这些子类在
    readObject
    方法中初始化数据。如果有需要向构造函数发送数据的情况,那么您将需要“串行代理”(我认为在这种情况下没有必要这样做)


    序列化底层模型数据可能更好<代码>形状
    s通常是临时构造的。

    我想我已经找到了问题第二部分的答案:

    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.
    

    但是,当输入包含样条曲线或贝塞尔曲线时,这样的路径将如何运行?它不会被插值并失去向量功能吗?@Riduidel我认为
    getPathIterator(AffineTransform)
    会返回这些片段,但
    getPathIterator(AffineTransform,double)
    不会。我猜一般来说,
    形状
    可能会返回一个近似路径。