2010-03-18 3 views
1

java.awt.Shape에 대해 두 가지 질문이 있습니다. 두 개의 Shape, shape1shape2이 있다고 가정합니다.java/swing : 모양 질문 : 직렬화 및 결합

  1. 정보를 파일에 저장하고 나중에 다른 컴퓨터에서 다시 만들 수 있도록 어떻게하면 어떤 방식으로 직렬화 할 수 있습니까? (ShapeSerializable 아니지만 당신이 정보를 얻을 수 있지만 드래그 종류의 것 + 내가 나중에 Shape 객체를 재구성하는 방법을 잘 모르겠어요처럼 보인다 getPathIterator() 방법을 가지고있다.)

  2. 방법 조인트 경계를 형성 할 수 있도록 그것들을 새로운 셰이프로 결합 할 수 있습니까? 난 당신이 경로에서 Shape을 재구성 할 수 있다고 생각

답변

2

(shape1 큰 정사각형이고 shape2이 광장 안에 작은 원이면, 나는 결합 된 형태가 큰 작은 원형 구멍이 정사각형 할 예) 정보는 java.awt.geom.Path2D.Double입니다. 그러나 특정 구현만큼 효율적이지 않을 수 있습니다.

가 필드로 Shape이 모든 클래스에서 특별한 일이없는 serialisable하기 위해, 다음을 보장해야합니다 모든 구성 형태 readObject 방법으로 데이터를 초기화 제공된 Shape의의 serialisable 서브 클래스. 데이터를 생성자에게 보낼 필요가있는 경우에는 "직렬 프록시"가 필요합니다 (이 경우에는 필요하지 않습니다).

기본 모델 데이터를 직렬화하는 것이 더 나을 수도 있습니다. Shape은 일반적으로 일시적으로 구성됩니다.

+0

하지만 어떻게 것입니다 입력 한 스플라인 또는 베 지어 곡선을 포함 같은 경로 동작합니다? 보간되고 벡터 적 능력이 느슨합니까? – Riduidel

+0

@Riduidel'getPathIterator (AffineTransform)'은 그 세그먼트를 리턴하지만'getPathIterator (AffineTransform, double)'은 그렇지 않다고 생각합니다. 일반적으로 'Shape'은 대략적인 경로를 반환 할 것입니다. –

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.