JavaFX | Canvas 그래픽 그리기 | GraphicsContext으로 그리기

그럼 컨트롤러 클래스에 그리기 위한 처리를 작성해 보자. 아래와 같이 간단한 예제를 작성하자.

package com.devkuma.javafx;
 
import java.net.URL;
import java.util.ResourceBundle;
 
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
 
 
public class AppController implements Initializable {
    @FXML Canvas canvas;
    GraphicsContext gc;
     
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        gc = canvas.getGraphicsContext2D();
        draw();
    }
     
    void draw(){
        gc.setFill(Color.RED);
        gc.setStroke(Color.BLUE);
        gc.fillRect(50, 50, 150, 150);
        gc.strokeOval(100, 100, 50, 50);
    }
}

이걸 실행하면 빨간색 사각형 영역에 청색 선으로 동그라미가 그려진다.

Canvas의 그리기는 “GraphicsContext 얻어 오기”, “그리기 설정”, “드로잉 메서드 호출"이라는 형태로 수행한다. 각 단계별로 설명을 하겠다.

GraphicsContext 얻어 오기

변수 = canvas.getGraphicsContext2D();

GraphicsContext를 얻어 오는 것은 Canvas 인스턴스의 “getGraphicsContext2D"메소드로 수행한다. 이것으로 인스턴스를 얻을 수 있기 때문에, 이것을 변수 등에 보관해 두었다가 사용한다.

색상 설정

graphicsContext.setFill("Color");
graphicsContext.setStroke("Color");

그리기를 수행할 때 미리 그리는 도형에 관한 상세한 설정을 수행해야 한다. 여기에서는 “색"에 대한 설정 만 준비되어 있다. “setFill"은 채우기의 내용을 설정하는 것이고, “setStroke"는 선 그리기 내용을 설정하는 것이다.

어느 것이나 인수에는 “Paint"라는 인스턴스를 지정한다. 이것은 렌더링 방식을 나타내는데 사용되는 것이다. 정해진 색으로 칠하려면 Paint의 서브 클래스인 ‘Color’를 사용하는 것이 일반적이다.

Color는 기본 색상 값이 클래스 변수로 사용할 수 있다. 이것들을 지정하여 쉽게 색상을 설정할 수 있다. 기타 색상은

new Color(빨강, 녹색, 파랑)

이런 형태로 인스턴스를 작성할 수 있다. 이 부근은 java.awt.Color와 거의 같기 때문에 어떻게 해서든 알 수 있을 것이다.

드로잉 메서드

다음은 드로잉 메서드를 호출하여 그리기이다. 이번에는 사각형과 타원형 그리기를 수행하는 메소드를 호출하고 있다. 다음 문장이다.

gc.fillRect(50, 50, 150, 150);
gc.strokeOval(100, 100, 50, 50);

GraphicsContext에는 이 외에도 다수의 드로잉 메서드가 포함되어 있다. 많은 드로잉 메소드는 “도형의 내부를 채우기”, “도형의 윤곽선을 그리기” 이렇게 2종류가 준비되어 있다. 채우기는 “fillOO”, 윤곽선 그리기는 “strokeOO"라는 이름에 되어 있다. 여기에서는 “사각형(Rect) 채우기(fill)”, “타원형(Oval) 그리기(stroke)” 2개의 드로잉을 하고 있기 때문에 각각 “fillRect”, “strokeOval"라는 메소드를 호출한 거다.