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

JavaFX 2D 도형의 StrokeType 속성 완벽 정리 – INSIDE, OUTSIDE, CENTERED

JavaFX에서 도형의 스트로크 타입(Stroke Type) 속성은 경계선이 어느 위치에 그려질지를 결정합니다. 스트로크 타입은 javafx.scene.shape 패키지의 Shape 클래스가 제공하는 setStrokeType() 메서드를 통해 간단히 설정할 수 있습니다.

JavaFX는 StrokeType 열거형(Enum)의 세 가지 상수로 세 종류의 스트로크를 지원합니다.

  • StrokeType.INSIDE — 경계선을 도형의 내부에 그립니다.
  • StrokeType.OUTSIDE — 경계선을 도형의 외부에 그립니다.
  • StrokeType.CENTERED — 도형의 가장자리가 선의 정중앙을 지나도록 그립니다. 즉, 선의 절반은 내부에, 나머지 절반은 외부에 걸치게 됩니다.

참고로 스트로크 타입을 별도로 지정하지 않으면 기본값은 CENTERED입니다. 도형에 경계선을 적용하려면 위 세 값 중 하나를 매개변수로 setStrokeType() 메서드에 전달하기만 하면 됩니다.

예제 코드

아래 예제는 마름모(Polygon) 네 개를 화면에 배치하고, 각각 원본 / INSIDE / CENTERED / OUTSIDE 스트로크 타입을 적용해 차이를 시각적으로 비교합니다.

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.StrokeType;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class StrokeTypeExample extends Application {
    public void start(Stage stage) {
        // 라벨에 사용할 공통 폰트 생성
        Font font = Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 12);

        Text label1 = new Text("Original Image");
        label1.setFont(font);
        label1.setX(250.0);
        label1.setY(125.0);

        // 스트로크 없는 원본 마름모
        Polygon rhombus1 = new Polygon(300.0, 0.0, 250.0, 50.0, 300.0, 100.0, 350.0, 50.0);

        Text label2 = new Text("Stroke Type: Inside");
        label2.setFont(font);
        label2.setX(25.0);
        label2.setY(275.0);

        // INSIDE: 경계선이 도형 내부에 그려짐
        Polygon rhombus2 = new Polygon(100.0, 150.0, 50.0, 200.0, 100.0, 250.0, 150.0, 200.0);
        rhombus2.setStroke(Color.BLUE);
        rhombus2.setStrokeWidth(7.0);
        rhombus2.setStrokeType(StrokeType.INSIDE);

        Text label3 = new Text("Stroke Type: Centered");
        label3.setFont(font);
        label3.setX(220.0);
        label3.setY(275.0);

        // CENTERED: 경계선이 가장자리 중앙에 그려짐
        Polygon rhombus3 = new Polygon(300.0, 150.0, 250.0, 200.0, 300.0, 250.0, 350.0, 200.0);
        rhombus3.setStroke(Color.BLUE);
        rhombus3.setStrokeWidth(7.0);
        rhombus3.setStrokeType(StrokeType.CENTERED);

        Text label4 = new Text("Stroke Type: Outside");
        label4.setFont(font);
        label4.setX(430.0);
        label4.setY(275.0);

        // OUTSIDE: 경계선이 도형 외부에 그려짐
        Polygon rhombus4 = new Polygon(490.0, 150.0, 440, 200.0, 490.0, 250.0, 540.0, 200.0);
        rhombus4.setStroke(Color.BLUE);
        rhombus4.setStrokeWidth(7.0);
        rhombus4.setStrokeType(StrokeType.OUTSIDE);

        // Group 객체 생성
        Group root = new Group(label1, label2, label3, label4, rhombus1, rhombus2, rhombus3, rhombus4);

        // Scene 객체 생성
        Scene scene = new Scene(root, 595, 310);

        // Stage 제목 설정
        stage.setTitle("Stroke Type");

        // Stage에 Scene 등록 후 표시
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String args[]) {
        launch(args);
    }
}

실행 결과

위 코드를 실행하면 파란색 굵기 7px의 경계선이 적용된 마름모들이 나타납니다. 같은 선 두께라도 스트로크 타입에 따라 선이 도형 안쪽에 채워지거나(INSIDE), 바깥쪽으로 돌출되거나(OUTSIDE), 가장자리를 중심으로 양쪽에 반씩 걸치는(CENTERED) 차이를 확인할 수 있습니다.

JavaFX 2D 도형의 StrokeType 속성 완벽 정리 – INSIDE, OUTSIDE, CENTERED

정리

스트로크 타입은 도형의 실제 크기와 좌표를 유지한 채 경계선의 시각적 표현만 조절하고 싶을 때 유용합니다. 예를 들어 도형의 크기를 변경하지 않으면서 테두리를 안쪽으로만 그리고 싶다면 INSIDE, 바깥쪽으로 강조하고 싶다면 OUTSIDE를 선택하면 됩니다.