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, MoveToLine 클래스.

이 코드를 이름으로 파일에 저장하십시오. 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, SubtractionIntersection.

S. 아니 작동 및 설명
1 조합 운영

이 작업은 두 개 이상의 셰이프를 입력으로 사용하고 그 셰이프가 차지하는 영역을 반환합니다.

2 교차로 운영

이 작업은 둘 이상의 셰이프를 입력으로 사용하고 그 사이의 교차 영역을 반환합니다.

빼기 연산

이 작업은 둘 이상의 셰이프를 입력으로 사용합니다. 그런 다음 두 번째 도형과 겹치는 영역을 제외한 첫 번째 도형의 영역을 반환합니다.