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 참고
'개념 정리 > Java' 카테고리의 다른 글
[JAVA] 네트워크, 소켓통신 (2) | 2024.01.07 |
---|---|
[JAVA] 스레드 (1) | 2023.10.31 |
[JAVA] 스윙 컴포넌트(JLabel, JButton, JCheckBox, JRadioButton, JTextField, JList, JComboBox) (0) | 2023.10.26 |
[JAVA] 이벤트, 리스너, key 이벤트, 마우스 이벤트 (0) | 2023.10.25 |
[JAVA] GUI, 컨테이너, 컴포넌트, 스윙, 배치관리자 (0) | 2023.10.23 |