Graphics 클래스
Graphics 클래스
Graphics 클래스는 다양한 장치에서 실현되는 컴포넌트나 화면 밖 이미지에 그릴 수 있게 하는 모든 그래픽 컨텍스트의 추상 기본 클래스예요. Graphics 객체는 Java가 지원하는 기본 렌더링 연산에 필요한 상태 정보를 캡슐화해요.
본문
이 상태 정보에는 다음 속성이 포함돼요.
- 그릴
Component객체 - 렌더링·클리핑 좌표를 위한 이동 원점(translation origin)
- 현재 클립(clip)
- 현재 색상
- 현재 글꼴
- 현재 논리 픽셀 연산 함수(XOR 또는 Paint)
- 현재 XOR 교대 색상(
setXORMode(Color)참고)
public abstract class Graphics
extends Object
좌표 거동
좌표는 무한히 가늘고 출력 장치의 픽셀 사이에 있어요. 도형 윤곽선을 그리는 연산은 픽셀 크기 펜이 경로의 기준점에서 아래·오른쪽으로 늘어진 채로 픽셀 사이의 무한히 가는 경로를 따라가며 수행돼요. 도형을 채우는 연산은 그 무한히 가는 경로의 내부를 채워요. 가로 텍스트를 렌더링하는 연산은 기준선 좌표에서 완전히 위쪽으로 문자 글리프의 상승 부분을 렌더링해요.
이 때문에 다음과 같은 의미가 생겨요.
- 주어진 사각형을 덮는 도형을 그리면, 그 사각형에 둘러싸인 도형을 채우는 것과 비교해 오른쪽·아래 가장자리에 픽셀 한 줄을 더 차지해요.
- 텍스트 줄의 기준선과 같은 y 좌표를 따라 가로선을 그으면, descender를 제외하고 그 선은 텍스트 아래에 완전히 그려져요.
클립과 그리기 규칙
이 Graphics 객체 메서드의 인자로 나타나는 모든 좌표는 메서드 호출 전에 이 Graphics 객체의 이동 원점에 상대적인 것으로 간주돼요. 모든 렌더링 연산은 현재 클립에 둘러싸인 영역 안의 픽셀만 수정해요. 사용자 공간의 Shape로 지정되고 프로그램이 제어하는 이 사용자 클립은 장치 공간으로 변환되어 장치 클립과 결합돼요. 이 조합이 합성 클립을 정의해요. 사용자 클립은 렌더링 시스템이 합성 클립을 반영하도록 수정할 수 없고, setClip이나 clipRect 메서드로만 변경할 수 있어요.
모든 그리기·쓰기는 현재 색상, 현재 페인트 모드, 현재 글꼴로 수행돼요.
주요 메서드
setColor(Color)/getColor()— 색상을 설정·조회해요.setFont(Font)/getFont()— 글꼴을 설정·조회해요.drawLine/drawRect/drawOval/drawRoundRect/drawArc/drawPolygon/drawPolyline— 도형 윤곽선을 그려요.fillRect/fillOval/fillRoundRect/fillArc/fillPolygon— 도형을 채워요.drawString(String, int, int)— 텍스트를 그려요.drawImage(Image, int, int, ImageObserver)— 이미지를 그려요.setClip(...)/clipRect(...)— 클리핑 영역을 설정해요.setXORMode(Color)/setPaintMode()— 페인트 모드를 설정해요.translate(int, int)— 원점을 이동해요.
사용 참고
Graphics 객체는 보통 Component.paint(Graphics) 메서드의 인자로 받아 사용하며, 반환된 후에는 사용할 수 없어요. 오프스크린 이미지에 그릴 때는 createImage로 만든 이미지의 getGraphics()로 얻어요.