Inner Class (내부 클래스)
자바의 이너 클래서 혹은 중첩클래스라고 한다. 하나의 클래스로 클래스나 인터페이스 내부에서 선언한다.
코드를 더 읽기 쉽고, 더 오래 유지 하기 위해 논리적인 그룹과 인터페이스들에서 이너클래스를 사용한다.
추가로 이너클래스는 개인적인 데이터 멤버와 메소드를 포함하는 외부 클래스의 모든 멤버들에 접근이 가능하다.
package eventPractice;
// 1. inner클래스(ImagePanel) 안에서 파일을 불러와 그림을 그려준다
// 2. inner 클래스를 MyFrame1에 멤버 변수로 선언해준다.
// 3. 프레임을 셋팅해주고나서 inner 클래스를 new() 해주고나서 add(프레임에 배치) 를 해주면 된다.
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
class MyFrame1 extends JFrame {
ImagePanel imagePanel; // inner클래스를 멤버변수로 지정해준다.
public MyFrame1() {
initData();
setInitLayout();
}
private void initData() {
setTitle("JPanel에 이미지 넣어보기 "); // 타이틀 제목
setSize(400, 400); // 프레임 사이즈
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프레임 종료시 프로그램 종료
imagePanel = new ImagePanel(); // inner 클래스를 생성
}
private void setInitLayout() {
setVisible(true); // 프레임을 화면에 보여주기
add(imagePanel); // 이미지를 불러오고 그려준 inner클래스 배치!
}
// inner class
class ImagePanel extends JPanel {
private Image image; // Image라는 클래스 안에는 그림을 불러오고, 그려주는 기능이 있다.
// 생성자 안에서 image 접근을해 new ImageIcon을 해준다. 거기서 불러올 이미지 파일명을 넣어주고 데이터 형태가 다르니 형변환 필수
public ImagePanel() {
image = new ImageIcon("player2.png").getImage(); // 바로위에 있는 Image와 ImageIcon은 데이터타입이 달라
// getImage(); 메소드를 활용한다 getImage()메소드는 반환 타입이 Image이기때문에 image변수에 담을수가 있다.
}
// paint를 오버라이드를 해줘서 그림을 그려주는 기능을 사용
@Override
public void paint(Graphics g) { // paint라는 메소드를 오버라이드를 해준뒤 그림을 그려주면된다.
super.paint(g);
g.drawImage(image, 0, 0, 400, 400, null); // ImagePanel에서 파일을 읽어온걸 그림을 그려준다.
// 0, 0좌표에서 기준으로 400 x 400 사이즈로 그림을 그려준다.
}
} // end of inner class
}
// 프로그램 실행 메인
public class MyFrameTest {
public static void main(String[] args) {
new MyFrame1();
}
}
실행 결과
'개발일지 > 자바' 카테고리의 다른 글
Paint(좌표값을 이용한 그림 그리는 방법) (0) | 2022.09.14 |
---|---|
(Image Class, inner Class 활용), 이미지 파일 불러오는 법 - 2 (0) | 2022.09.14 |
GridLayout(배열, ArrayList활용) (1) | 2022.09.13 |
BorderLayout(배열, ArrayList활용) (0) | 2022.09.13 |
FlowLayout(ArrayList 활용) (0) | 2022.09.13 |
댓글