최원종의 개발 블로그

Bubble_1(기본 화면완성) 본문

Java/SWING

Bubble_1(기본 화면완성)

chl6698 2026. 3. 18. 17:47

인터페이스(iinterface)

인터페이스는 "이 클래스 안에 이 메서드들은 구현해야 한다"는 약속.

Moveable (인터페이스 - 설계도)
  ↓ implements (구현)
Player (실제로 메서드를 만드는 클래스)

 

Player가 Moveable을 구현하면, left() right() up() down() 4개를 반드시 만들어야 함

 

 

파일 구성

bubble/test01/
  ├── Moveable.java       ← 인터페이스 (이동 메서드 설계도)
  ├── Player.java         ← 플레이어 (JLabel 상속 + Moveable 구현)
  └── BubbleFrame.java    ← 게임 프레임 (화면 구성 + 키 이벤트)

코드

-인터페이스

package test01;

public interface Moveable {
    public abstract void left();
    public abstract void right();
    public abstract void up();
    public abstract void down();
}

 

-Player

package test01;

import javax.swing.*;

public class Player extends JLabel implements Moveable {
    //플레이어의 현재 좌표 상태 값
    private int x;
    private int y;

    //좌우 방향 이미지(방향키에 따라서 이미지 전환)
    private ImageIcon playerR;
    private ImageIcon playerL;

    public Player() {
        initData();
        setInitLayout();
    }

    private void initData() {
        playerR = new ImageIcon("img/playerR.png");
        playerL = new ImageIcon("img/playerL.png");
    }

    private void setInitLayout() {
        //캐릭터 초기 위치 설정
        x = 55;
        y = 555;
        setSize(50, 50);
        setIcon(playerR); // 초기 방향 설정
        setLocation(x, y);
    }

    @Override
    public void left() {
        setIcon(playerL);
        System.out.println("player left() 호출");
    }

    @Override
    public void right() {
        setIcon(playerR);
        System.out.println("player right() 호출");
    }

    @Override
    public void up() {
        System.out.println("player up() 호출");
    }

    @Override
    public void down() {
        System.out.println("player down() 호출");
    }
}

 

-BubbleFrame

package test01;

import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class BubbleFrame extends JFrame {

    private JLabel backgroundMap;
    private Player player;

    public BubbleFrame() {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setTitle("버블버블게임");
        setSize(1000, 640);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        backgroundMap = new JLabel(new ImageIcon("img/backgroundMap.png"));
        setContentPane(backgroundMap);

        player = new Player();
    }

    private void setInitLayout() {
        setLayout(null);//좌표기반
        setResizable(false); //창 크기 고정
        setLocationRelativeTo(null); //화면 정 중앙 배치 (프레임)

        backgroundMap.add(player);

        setVisible(true);// 화면에 보이게

    }

    private void addEventListener() {
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {

                //방향키 코드를 Player의 이동 메서드로 연결
                switch (e.getKeyCode()) {
                    case KeyEvent.VK_LEFT:
                        player.left();
                        break;


                    case KeyEvent.VK_RIGHT:
                        player.right();
                        break;


                    case KeyEvent.VK_UP:
                        player.up();
                        break;

                }
            }

            @Override
            public void keyPressed(KeyEvent e) {

            }
        });
    }

    //테스트 코드
    public static void main(String[] args) {
        new BubbleFrame();
    }

}

 

-출력화면

 

'Java > SWING' 카테고리의 다른 글

Bubble_3(왼쪽 오른쪽 벽 감지)  (0) 2026.03.19
Bubble_2(이동, 점프)  (0) 2026.03.19
로또 게임 만들기  (0) 2026.03.18
Swing (Thread 활용)  (0) 2026.03.18
JLable 사용해 이미지 겹치기  (0) 2026.03.17