JavaFX-2D 모양
이전 장에서 우리는 JavaFX의 기본 응용 프로그램을 보았습니다. 여기서 빈 창을 만드는 방법과 JavaFX의 XY 평면에 선을 그리는 방법을 배웠습니다. 선 외에도 여러 다른 2D 모양을 그릴 수도 있습니다.
2D 모양
일반적으로 2D 도형은 XY 평면에 그릴 수있는 기하학적 도형으로 Line, Rectangle, Circle 등이 있습니다.
JavaFX 라이브러리를 사용하여 그릴 수 있습니다.
Line, Rectangle, Circle, Ellipse, Polygon, Polyline, Cubic Curve, Quad Curve, Arc와 같은 미리 정의 된 모양.
MoveTO Path Element, Line, Horizontal Line, Vertical Line, Cubic Curve, Quadratic Curve, Arc와 같은 경로 요소.
이 외에도 SVG 경로를 구문 분석하여 2D 모양을 그릴 수도 있습니다.
위에서 언급 한 각 2D 모양은 클래스로 표현되며 이러한 모든 클래스는 패키지에 속합니다. javafx.scene.shape. 명명 된 클래스Shape JavaFX의 모든 2 차원 도형의 기본 클래스입니다.
2D 모양 만들기
차트를 만들려면 다음을 수행해야합니다.
- 필요한 셰이프의 각 클래스를 인스턴스화합니다.
- 도형의 속성을 설정합니다.
- 그룹에 모양 개체를 추가합니다.
각 클래스 인스턴스화
2 차원 모양을 만들려면 먼저 해당 클래스를 인스턴스화해야합니다.
예를 들어, 라인을 생성하려면 다음과 같이 Line이라는 클래스를 인스턴스화해야합니다.
Line line = new Line();
모양의 속성 설정
클래스를 인스턴스화 한 후 setter 메서드를 사용하여 셰이프의 속성을 설정해야합니다.
예를 들어 선을 그리려면 선의 시작점과 끝점의 x 및 y 좌표를 전달해야합니다. 다음과 같이 각각의 setter 메서드를 사용하여 이러한 값을 지정할 수 있습니다.
//Setting the Properties of the Line
line.setStartX(150.0f);
line.setStartY(140.0f);
line.setEndX(450.0f);
line.setEndY(140.0f);
그룹에 모양 개체 추가
마지막으로 아래와 같이 생성자의 매개 변수로 전달하여 모양의 객체를 그룹에 추가해야합니다.
//Creating a Group object
Group root = new Group(line);
다음 표는 JavaFX에서 제공하는 다양한 모양 (클래스) 목록을 제공합니다.
S. 아니 | 모양 및 설명 |
---|---|
1 | 선 선은 두 점을 연결하는 기하학적 구조입니다. 그만큼Line 패키지 클래스 javafx.scene.shape XY 평면의 선을 나타냅니다. |
2 | 직사각형 일반적으로 직사각형은 모든 내부 각도가 직각 인 두 쌍의 평행 및 동시 변이있는 4면 다각형입니다. JavaFX에서 Rectangle은 다음과 같은 클래스로 표시됩니다.Rectangle. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
삼 | 둥근 직사각형 JavaFX에서는 날카로운 모서리 또는 아치형 모서리가있는 사각형을 그릴 수 있으며 아치형 모서리가있는 사각형을 둥근 사각형이라고합니다. |
4 | 원 원은 중심점에서 고정 된 거리에있는 모든 점이 닫힌 루프를 형성하는 선입니다. JavaFX에서 원은 다음과 같은 클래스로 표시됩니다.Circle. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
5 | 타원 타원은 각각 초점이라고하는 두 점으로 정의됩니다. 타원의 한 점을 찍으면 초점 점까지의 거리 합계가 일정합니다. 타원의 크기는이 두 거리의 합에 의해 결정됩니다. JavaFX에서 타원은 다음과 같은 클래스로 표시됩니다. Ellipse. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
6 | 다각형 끝에서 끝까지 연결된 다수의 동일 평면상의 선 세그먼트로 형성된 닫힌 모양입니다. JavaFX에서 다각형은 다음과 같은 클래스로 표현됩니다.Polygon. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
7 | 폴리 라인 폴리 라인은 폴리 라인이 끝이 닫히지 않는다는 점을 제외하고는 폴리곤과 동일합니다. 또는 하나 이상의 선분으로 구성된 연속 선입니다. JavaFX에서 Polyline은 다음과 같은 클래스로 표시됩니다.Polygon. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
8 | 큐빅 곡선 3 차 곡선은 XY 평면의 베 지어 매개 변수 곡선입니다. JavaFX에서 3 차 곡선은 다음과 같은 클래스로 표현됩니다. CubicCurve. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
9 | 쿼드 커브 2 차 곡선은 XY 평면에서 베 지어 매개 변수 곡선입니다. 2 차 곡선입니다. JavaFX에서 QuadCurve는 QuadCurve라는 클래스로 표시됩니다. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
10 | 호 호는 곡선의 일부입니다. JavaFX에서 호는 다음과 같은 클래스로 표시됩니다.Arc. 이 클래스는 패키지에 속합니다-javafx.scene.shape. 호의 종류이 외에도 세 가지 유형의 호를 그릴 수 있습니다. Open, Chord, Round. |
11 | SVGPath JavaFX에서는 SVG 경로를 구문 분석하여 이미지를 구성 할 수 있습니다. 이러한 모양은 다음과 같은 클래스로 표현됩니다.SVGPath. 이 클래스는 패키지에 속합니다.javafx.scene.shape. 이 클래스에는content문자열 데이터 유형의. 이미지를 그려야하는 SVG 경로 인코딩 문자열을 나타냅니다. |
경로 클래스를 통해 더 많은 모양 그리기
이전 섹션에서는 클래스를 인스턴스화하고 각 매개 변수를 설정하여 미리 정의 된 간단한 모양을 그리는 방법을 보았습니다.
그러나 이러한 미리 정의 된 모양만으로는에서 제공하는 기본 요소 이외의 복잡한 모양을 만들기에 충분하지 않습니다. javafx.shape package.
예를 들어, 다음 다이어그램과 같이 그래픽 요소를 그리려는 경우 이러한 단순한 모양에 의존 할 수 없습니다.
경로 클래스
이러한 복잡한 구조를 그리기 위해 JavaFX는 Path. 이 클래스는 도형의 기하학적 윤곽을 나타냅니다.
다양한 정보를 보유한 관찰 가능한 목록에 첨부됩니다. Path Elements moveTo, LineTo, HlineTo, VlineTo, ArcTo, QuadCurveTo, CubicCurveTo 등.
인스턴스화 할 때이 클래스는 지정된 경로 요소를 기반으로 경로를 구성합니다.
다음과 같이 인스턴스화하는 동안 경로 요소를이 클래스에 전달할 수 있습니다.
Path myshape = new Path(pathElement1, pathElement2, pathElement3);
또는 관찰 가능한 목록을 얻고 다음을 사용하여 모든 경로 요소를 추가 할 수 있습니다. addAll() 다음과 같이 방법-
Path myshape = new Path();
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3);
add () 메서드를 사용하여 요소를 개별적으로 추가 할 수도 있습니다.
Path myshape = new Path();
myshape.getElements().add(pathElement1);
경로로 이동 요소
경로 요소 MoveTo경로의 현재 위치를 지정된 지점으로 이동하는 데 사용됩니다. 일반적으로 경로 요소를 사용하여 그린 모양의 시작점을 설정하는 데 사용됩니다.
다음과 같은 클래스로 표시됩니다. LineTo 패키지의 javafx.scene.shape. 즉, 이중 데이터 유형의 두 가지 속성이 있습니다-
X − 현재 위치에서 선이 그려 질 지점의 x 좌표.
Y − 현재 위치에서 선이 그려 질 지점의 y 좌표.
MoveTo 클래스를 인스턴스화하고 다음과 같이 새 지점의 x, y 좌표를 전달하여 경로로 이동 요소를 만들 수 있습니다.
MoveTo moveTo = new MoveTo(x, y);
생성자에 값을 전달하지 않으면 새 점이 (0,0)으로 설정됩니다.
다음과 같이 각각의 setter 메서드를 사용하여 x, y 좌표로 값을 설정할 수도 있습니다.
setX(value);
setY(value);
예 – 복잡한 경로 그리기
이 예에서는 다음 모양을 사용하여 그리는 방법을 보여줍니다. Path, MoveTo 과 Line 클래스.
이 코드를 이름으로 파일에 저장하십시오. ComplexShape.java.
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 {
@Override
public void start(Stage stage) {
//Creating a Path
Path path = new Path();
//Moving to the starting point
MoveTo moveTo = new MoveTo(108, 71);
//Creating 1st line
LineTo line1 = new LineTo(321, 161);
//Creating 2nd line
LineTo line2 = new LineTo(126,232);
//Creating 3rd line
LineTo line3 = new LineTo(232,52);
//Creating 4th line
LineTo line4 = new LineTo(269, 250);
//Creating 4th line
LineTo line5 = new LineTo(108, 71);
//Adding all the elements to the path
path.getElements().add(moveTo);
path.getElements().addAll(line1, line2, line3, line4, line5);
//Creating a Group object
Group root = new Group(path);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing an arc through a path");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
다음 명령을 사용하여 명령 프롬프트에서 저장된 Java 파일을 컴파일하고 실행합니다.
javac ComplexShape.java
java ComplexShape
위 프로그램은 실행시 아래 그림과 같이 현재 위치에서 지정된 지점까지 그려지는 원호를 표시하는 JavaFX 창을 생성합니다.
다음은 JavaFX에서 제공하는 다양한 경로 요소 (클래스)입니다. 이러한 클래스는 패키지에 있습니다.javafx.shape. 이 모든 클래스는 클래스를 상속합니다.PathElement.
S. 아니 | 모양 및 설명 |
---|---|
1 | LineTo 경로 요소 line현재 위치에서 지정된 좌표의 점까지 직선을 그리는 데 사용됩니다. 다음과 같은 클래스로 표시됩니다.LineTo. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
2 | HlineTo 경로 요소 HLineTo현재 위치에서 지정된 좌표의 점까지 수평선을 그리는 데 사용됩니다. 다음과 같은 클래스로 표시됩니다.HLineTo. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
삼 | VLineTo 경로 요소 vertical line현재 위치에서 지정된 좌표의 점까지 수직선을 그리는 데 사용됩니다. 다음과 같은 클래스로 표시됩니다.VLineTo. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
4 | QuadCurveTo 경로 요소 2 차 곡선을 사용하여 quadratic curve현재 위치에서 지정된 좌표의 한 지점으로. 다음과 같은 클래스로 표시됩니다.QuadraticCurveTo. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
5 | CubicCurveTo 경로 요소 cubic curve현재 위치에서 지정된 좌표의 점으로 3 차 곡선을 그리는 데 사용됩니다. 다음과 같은 클래스로 표시됩니다.CubicCurveTo. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
6 | ArcTo 경로 요소 Arc현재 위치에서 지정된 좌표의 점으로 호를 그리는 데 사용됩니다. 다음과 같은 클래스로 표시됩니다.ArcTo. 이 클래스는 패키지에 속합니다.javafx.scene.shape. |
2D 개체의 속성
모든 2D 개체에 대해 채우기, 스트로크, StrokeType 등과 같은 다양한 속성을 설정할 수 있습니다. 다음 섹션에서는 2D 개체의 다양한 속성에 대해 설명합니다.
- 스트로크 유형
- 스트로크 폭
- 스트로크 채우기
- Stroke
- 스트로크 라인
- 스트로크 마이 터 한계
- 스트로크 라인 캡
- Smooth
2D 개체에 대한 작업
그룹에 둘 이상의 도형을 추가하면 아래와 같이 첫 번째 도형이 두 번째 도형과 겹칩니다.
변형 (회전, 크기 조절, 변환 등), 전환 (애니메이션) 외에도 2D 개체에 대해 세 가지 작업을 수행 할 수 있습니다. Union, Subtraction 과 Intersection.
S. 아니 | 작동 및 설명 |
---|---|
1 | 조합 운영 이 작업은 두 개 이상의 셰이프를 입력으로 사용하고 그 셰이프가 차지하는 영역을 반환합니다. |
2 | 교차로 운영 이 작업은 둘 이상의 셰이프를 입력으로 사용하고 그 사이의 교차 영역을 반환합니다. |
삼 | 빼기 연산 이 작업은 둘 이상의 셰이프를 입력으로 사용합니다. 그런 다음 두 번째 도형과 겹치는 영역을 제외한 첫 번째 도형의 영역을 반환합니다. |