javafx.scene.shape 패키지는 다양한 2D 도형을 그릴 수 있는 클래스들을 제공합니다. 하지만 이 패키지에서 제공하는 것들은 선(line), 원(circle), 다각형(polygon), 타원(ellipse)과 같은 기본 도형에 불과합니다.
따라서 더 복잡하고 자유로운 사용자 정의 도형을 그리고 싶다면 Path 클래스를 사용해야 합니다.
Path 클래스란?
Path 클래스는 도형의 기하학적 외곽선(geometrical outline)을 표현하는 클래스입니다. 이 클래스는 MoveTo, LineTo, HLineTo, VLineTo, ArcTo, QuadCurveTo, CubicCurveTo와 같은 다양한 경로 요소(Path Element)들을 담고 있는 관찰 가능한 리스트(observable list)에 연결됩니다.
Path 클래스의 생성자는 PathElement 타입의 가변 인수(varargs)를 받아들이며, 전달된 경로 요소들을 기반으로 하나의 경로를 구성합니다.
주요 경로 요소 살펴보기
- MoveTo: 경로의 현재 위치를 지정된 좌표로 이동시킵니다. 실제로 선을 그리지는 않습니다.
- LineTo: 현재 좌표에서 지정된 좌표까지 직선을 그립니다.
예제 코드
다음 예제에서는 MoveTo, LineTo 요소와 Path 클래스를 활용하여 복잡한 사용자 정의 도형(별 모양)을 그려보겠습니다.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
public class ComplexShape extends Application {
public void start(Stage stage) {
// 도형 그리기
MoveTo moveTo = new MoveTo(108, 71);
LineTo line1 = new LineTo(321, 161);
LineTo line2 = new LineTo(126,232);
LineTo line3 = new LineTo(232,52);
LineTo line4 = new LineTo(269, 250);
LineTo line5 = new LineTo(108, 71);
// Path 생성
Path path = new Path(moveTo, line1, line2, line3, line4, line5);
// Stage 객체 준비
Group root = new Group(path);
Scene scene = new Scene(root, 600, 300);
stage.setTitle("Drawing an arc through a path");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}코드 설명
먼저 MoveTo(108, 71)로 시작점을 설정한 뒤, 여러 개의 LineTo 객체를 사용하여 각 좌표를 순차적으로 연결합니다. 마지막 LineTo가 시작점으로 돌아가면서 닫힌 도형이 완성됩니다. 생성된 Path 객체를 Group에 추가하고 Scene에 담아 화면에 표시하는 구조입니다.
실행 결과
위 코드를 실행하면 다음과 같이 여러 개의 선분이 연결되어 만들어진 별 모양의 사용자 정의 도형이 화면에 나타납니다.

이처럼 Path 클래스와 다양한 경로 요소를 조합하면 기본 도형으로는 표현할 수 없는 복잡한 벡터 그래픽도 손쉽게 구현할 수 있습니다.