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) 차이를 확인할 수 있습니다.

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