Bubble (객체 지향 패러다임) - 1

1. 객체 지향 패러다임에 맞는 클래스 설계하기

1. 프레임 클래스
2. 플레이어 클래스
3. Moveable 인터페이스
package bubble.test.ex01;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class BubbleFrame extends JFrame {
	
	private JLabel backgroundMap;
	private Player player;
	private final int BG_WIDTH = 1000;
	private final int BG_HEIGHT = 640;
	
	public BubbleFrame() {
		initData();
		setInitLayout();
		addEventListener();
	}

	private void initData() {
		backgroundMap = new JLabel(new ImageIcon("img/backgroundMap.png"));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// Frame -> root Panel
		setContentPane(backgroundMap); // add 처리
		setSize(BG_WIDTH, BG_HEIGHT);
		
		player = new Player();
	}

	private void setInitLayout() {
		setLayout(null); // 좌표값으로 배치
		setResizable(false); // 프레임 조절 불가
		setLocationRelativeTo(null); // JFrame을 모니터 가운데 자동 배치
		setVisible(true);
		
		add(player);
	}

	
	private void addEventListener() {
		// KeyAdapter는 KeyListener 를 구현한 추상 클래스
		// 불필요한 메서드를 쓰지 않고 원하는 메서드만 오버라이드해서 쓰면됨
		addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				// 개발단계에서는 확인 용도로 써놓음
				System.out.println("key code : " + e.getKeyCode());
				
				switch (e.getKeyCode()) {
					case KeyEvent.VK_LEFT :
						player.left();
						break;
					case KeyEvent.VK_RIGHT :
						player.right();
						break;
					case KeyEvent.VK_UP :
						player.up();
						break;
				}
			} // end of KeyPressed
		});
	}
	
	// 코드 테스트
	public static void main(String[] args) {
		new BubbleFrame();
	} // end of main
	
}
package bubble.test.ex01;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class Player extends JLabel implements Moveable{
	
	private int x;
	private int y;
	private ImageIcon playerR, playerL;
	private final int P_WIDTH = 50;
	private final int P_HEIGTH = 50;
	private final int MOVE_DISTANCE = 10;
	
	public Player() {
		initData();
		setInitLayout();
	}
	
	private void initData() {
		playerR = new ImageIcon("img/playerR.png");
		playerL = new ImageIcon("img/playerL.png");
		
		// 처음 실행 시 초기 값 세팅
		x = 55;
		y = 535;
		setIcon(playerR);
		setSize(P_WIDTH, P_HEIGTH);
		setLocation(x, y);
	}
	
	private void setInitLayout() {
		
	}




	@Override
	public void left() {
		// 왼쪽 방향키 이벤트 발생 시
		// 이미지를 왼쪽으로 보는 이미지로 세팅
		setIcon(playerL);
		x -= MOVE_DISTANCE;
		setLocation(x, y);
	}

	@Override
	public void right() {
		setIcon(playerR);
		x += MOVE_DISTANCE;
		setLocation(x, y);
		
	}

	@Override
	public void up() {
		
	}

	@Override
	public void down() {
		
	}

}
package bubble.test.ex01;

public interface Moveable {
	
	// public abstract 생략 가능
	public abstract void left();
	void right();
	void up();
	void down();
}

Swing 목차로 돌아가기

 

'Java > Swing 프로젝트' 카테고리의 다른 글

Bubble (Daemon Thread 활용) - 3  (0) 2024.05.02
Bubble (Thread 활용) - 2  (0) 2024.05.02
Swing 스레드 활용 - 8  (0) 2024.05.01
Swing 로또 게임 만들기 - 7  (0) 2024.04.30
Swing Key Listener - 6  (0) 2024.04.30