Christmas Pikachu (Image Class, inner Class 활용), 이미지 파일 불러오는 법 - 1
개발일지/자바

(Image Class, inner Class 활용), 이미지 파일 불러오는 법 - 1

ZI_CO 2022. 9. 14.

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();
	}
}

 

 

 

실행 결과

댓글