JavaFX | 셰이프(Shape)을 사용한 벡터 그래픽 | 클리핑(clipping)으로 오려내기


기본 도형을 만드는 방법은 대체로 알게 되었다. 하지만, 좀 더 복잡한 도형을 만드는 방법에 대한 배우고 싶은 기능에 대해서도 몇 가지 보충 하도록 하자.

우선 ‘클리핑(clipping)‘에 대해서이다. 클리핑라는 것은 윈도우에 ‘창’을 열고, 거기에서 표시하는 것이다. 요약하면, 그려진 그래픽 일부분만 잘라내어 표시할 수 있다.

이 클리핑은 “Node"라는 클래스에 있는 “setClip"라는 메소드로 설정할 수 있다. Node 클래스는 BorderLayout과 Pane 등의 컨테이너 종류이며, 나아가서는 여기에서 다룬 모양 종류의 슈퍼 클래스이기도 하다.

"Node".setClip("Node");

이 setClip는 인수로 Node 인스턴스를 지정한다. 그거로 부터 그 부품에 인수 노드의 형상을 클리핑 영역으로 설정한다. 그 부품의 표시는 인수에 지정된 노드 형상의 모양으로 잘라낸 것이 표시된다. 인수 노드의 형상은 외부에 아무것도 그려지지 않는다.

그럼 실제로 해 봅시다. 아래에 예제 코드와 같이 작성해 보자. 이전에 createShape 방법을 수정하여 사용하자.

public void createShape(Pane root){
    Rectangle r = new Rectangle(50, 50, 100, 100);
    r.setFill(Color.RED);
    r.setStroke(Color.BLUE);
    r.setStrokeWidth(3);
    root.getChildren().add(r);
    Circle c = new Circle(150, 150, 50);
    c.setFill(Color.YELLOW);
    c.setStroke(Color.GREEN);
    c.setStrokeWidth(10);
    root.getChildren().add(c);
    Circle clip = new Circle(120, 120, 75);
    root.setClip(clip);
}

여기에서는 Rectangle와 Circle을 작성하여 root에 설정한 후, 클리핑 용 Circle을 만들었다. 그리고 그것을

root.setClip(clip);

으로 클리핑으로 설정하고 있다. 그러면 setClip한 Circle 원형 모양으로 잘라 내서 그래픽이 표시가 된다.