Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

JavaFX의 다양한 경로(Path) 요소 완벽 정리

javafx.scene.shape 패키지는 다양한 2D 도형을 그릴 수 있는 클래스들을 제공합니다. 하지만 여기서 제공되는 것은 선, 원, 다각형, 타원 등 기본적인(primitive) 도형에 불과합니다. 따라서 더 복잡한 사용자 지정 도형을 그리고 싶다면 Path 클래스를 사용해야 합니다.

Path 클래스란?

Path 클래스는 도형의 기하학적 윤곽선(geometrical outline)을 표현하는 클래스로, 이를 활용하면 원하는 형태의 사용자 지정 경로를 자유롭게 그릴 수 있습니다.

사용자 지정 경로를 그리기 위해 JavaFX는 다양한 경로 요소(path element)를 제공하며, 이 모든 요소는 javafx.scene.shape 패키지에서 클래스 형태로 사용할 수 있습니다.

  • LineTo − '직선(line)' 경로 요소를 나타내는 클래스입니다. 현재 좌표에서 지정된 새 좌표까지 직선을 그리는 데 사용됩니다.

  • HlineTo − '수평선(horizontal line)' 경로 요소를 나타내는 클래스입니다. 현재 좌표에서 지정된 새 좌표까지 수평선을 그립니다.

  • VLineTo − '수직선(vertical line)' 경로 요소를 나타내는 클래스입니다. 현재 좌표에서 지정된 새 좌표까지 수직선을 그립니다.

  • QuadCurveTo − '2차 곡선(quadratic curve)' 경로 요소를 나타내는 클래스입니다. 현재 좌표에서 지정된 새 좌표까지 2차 베지어 곡선을 그립니다.

  • CubicCurveTo − '3차 곡선(cubic curve)' 경로 요소를 나타내는 클래스입니다. 현재 좌표에서 지정된 새 좌표까지 3차 베지어 곡선을 그립니다.

  • ArcTo − '호(arc)' 경로 요소를 나타내는 클래스입니다. 현재 좌표에서 지정된 새 좌표까지 호를 그립니다.

  • MoveTo − 이 클래스를 사용하면 경로의 시작점을 현재 좌표에서 새 좌표로 이동시킬 수 있습니다.

경로 요소를 활용한 경로 만들기

Path 클래스는 현재 경로의 구성 요소들을 담고 있는 관찰 가능 리스트(observable list)를 내부적으로 포함하고 있습니다. 따라서 경로를 그리려면 아래 단계를 순서대로 따르면 됩니다.

  1. 필요한 PathElement 클래스들을 인스턴스화합니다.
  2. 각 경로 요소의 속성을 setter 메서드로 설정하거나, 생성자의 인자로 전달합니다.
  3. Path 클래스를 인스턴스화합니다.
  4. getElements() 메서드를 사용하여 앞서 생성한 Path 객체의 observable list를 가져옵니다.
  5. add() 또는 addAll() 메서드를 사용하여 원하는 순서대로 모든 경로 요소 객체를 observable list에 추가합니다.
  6. 마지막으로, 완성된 경로를 Group 객체에 추가합니다.

참고 − 경로 요소들을 Path 클래스의 생성자에 직접 전달하는 방법도 가능합니다.

예제 코드

다음 JavaFX 예제는 LineTo 경로 요소를 사용하여 별 모양의 경로를 그립니다.

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
public class PathElementsExample extends Application {
   public void start(Stage stage) {
      //Drawing the shape
      MoveTo moveTo = new MoveTo(208, 71);
      LineTo line1 = new LineTo(421, 161);
      LineTo line2 = new LineTo(226,232);
      LineTo line3 = new LineTo(332,52);
      LineTo line4 = new LineTo(369, 250);
      LineTo line5 = new LineTo(208, 71);
      //Creating a Path
      Path path = new Path(moveTo, line1, line2, line3, line4, line5);
      path.setFill(Color.DARKCYAN);
      path.setStrokeWidth(8.0);
      path.setStroke(Color.DARKSLATEGREY);
      //Preparing the Stage object
      Group root = new Group(path);
      Scene scene = new Scene(root, 595, 300, Color.BEIGE);
      stage.setTitle("Drawing an arc through a path");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

실행 결과

JavaFX의 다양한 경로(Path) 요소 완벽 정리