본문 바로가기

개념 정리/Java

[JAVA] 그래픽

1. 그래픽

[컴포넌트의 내부 모양 그리기]

· paintComponent()

직접호출하면 안됨! 강제 페인팅하려면 repaint()

class MyComponent extends JButton {	// 기존 컴포넌트
    public void paintComponent(Graphics g) {...}	// 오버라이딩
	...
}

 

[컴포넌트의 테두리 그리기]

· paintBorder()

class MyComponent extends JButton {	// 기존 컴포넌트
    public void paintBorder(Graphics g) {...}	// 오버라이딩
	...
}

 

[문자열 그리기]

g.drawString("안녕",30,40);	// (30,40) 위치에 "안녕"문자열 그리기

 

[색 설정]

g.setColor(new Color(255,0,0))	// 빨간색 생성해 색 설정
g.setColor(Color.YELLOW)		// 노란색으로 색 설정

 

[폰트]

g.setFont(new Font("Arial", Font.ITALIC, 30));	// Arial체 ITALIC스타일로 30픽셀 사이즈

 

[도형그리기 및 칠하기]

void drawLine(int x1, int y1, int x2, int y2)	// (x1,y1) ~ (x2,y2)까지 선 그리기
void drawOval(int x, int y, int w, int h)	// (x,y)위치에 w*h크기의 사각형에 내접하는 타원 그리기
void drawRect(int x, int y, int w, int h)	// (x,y)위치에 w*h크기의 사각형 그리기

fillRect(int x, int y, int w, int h)	// draw를 fill로 바꾸기.
					//setColor로 색 설정 먼저 해주고 fillRect해야 함

 

[이미지 삽입]

1. JLabel 컴포넌트 이용하는 방법 : 원본크기로만 그려짐, 이미지 관리 쉬움. paintComponent()오버라이딩하면 변형가능

2. Graphics 메소드 이용하는 방법 : drawImage()

 

· 원본크기 이미지 삽입

boolean drawImage(Image img, int x, int y, ImageObserver observer)
boolean drawImage(Image img, int x, int y, Color bgColor, ImageObserver observer)
// x,y : 이미지가 그려질 좌표
// bgColor : 이미지에 투명한 부분이 있을 경우 투명 부분에 칠해질 색상
// observer : 이미지 그리기 완료를 통보받는 객체

 

· 크기 조절한 이미지 삽입

boolean drawImage(Image img, int x, int y, int w, int h, Color bgColor, ImageObserver observer)
// img를 그래픽 영역 (x,y) 위치에 w*h크기로 조절해서 그림
// w, h : 그려지는 폭, 높이

 

· 원본의 일부분을 크기 조절해서 삽입

boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgColor, ImageObserver observer)
// img의 (sx1,sy1)~(sx2,xy2)부분을 그래픽 영역 내의 (dx1,dy1)~(dx2,dy2)의 크기로 변형해 그림
// dx1, dy1 : 그래픽 영역의 왼쪽 상단 모서리
// dx2, dy2 : 그래픽 영역의 오른쪽 하단 모서리
// sx1, sy1 : 이미지(img) 내의 왼쪽 상단 모서리
// sx2, sy2 : 이미지(img) 내의 오른쪽 하단 모서리

 

· 이미지의 폭과 높이 알아내기

ImageIcon icon = new ImageIcon("경로~~");	// 이미지 로딩
Image img = icon.getImage();	// 이미지 객체. (이미지 정보 추출)

int w = img.getWidth(this);	// this는 ImageObserver
int h = img.getHeight(this);

 

[클리핑]

특정 사각형 영역에만 그래픽 이뤄지게 하는 기능. (특정 사각형 영역만큼 이미지 자름)

void setClip(int x, int y, int w, int h)
// (x,y)위치에서 w*h사각형 영역을 클리핑 영역으로 지정

void clipRect(int x, int y, int w, int h)
// 기존 클리핑 영역과 현재 설정하는 새 영역((x,y)위치의 w*h사각형)의 교집합 영역으로 클리핑 영역으로 지정

 

[ repaint(), revalidate() ]

· repaint() : 강제로 페인팅 지시. paintComponent()는 직접호출이 불가하므로 repaint() 이용해 강제 페인팅.

· revalidate() : 자식 컴포넌트의 재배치 지시. 컨테이너에 컴포넌트를 삽입/삭제했다면 revalidate()와 repaint()를 해야함

component.repaint();	// 컴포넌트 다시그리기
component.getParent().repaint();	// 컴포넌트의 부모컨테이너에게 다시그리기 지시

container.revalidate();	// 컴포넌트 재배치 지시
container.repaint();	// 컨테이너 다시그리기 지시

 

 

명품 JAVA Programming 참고