[Java/Swing] KeyListener - 이미지 움직이기

2023. 2. 18. 19:43·Java/Swing (GUI)
728x90
728x90

  - 키보드 방향키로 움직이되, 이미지가 창 밖으로 나가지 않도록 함

 

코드

// 인터페이스 파일 //

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

------------------------------------
// 클래스 파일 //

public class MoveLabelFrame3 extends JFrame implements Moveable {

    private JLabel label;
    private int labelX;
    private int labelY;
    private final int SIZE_X = 800;
    private final int SIZE_Y = 800;

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

    private void initData() {
        setSize(SIZE_X, SIZE_Y);
        setDefaultCloseOperation(3);
        setResizable(false);
        labelX = 300;
        labelY = 350;
        label = new JLabel(new ImageIcon("images/image4.png"));
        label.setSize(250, 250);
    }

    private void setInitLayout() {
        setLayout(null);
        label.setLocation(labelX, labelY);
        add(label);

        setVisible(true);
    }

    private void addEventListener() {
        this.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    right();
                } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    left();	
                } else if (e.getKeyCode() == KeyEvent.VK_UP) {
                    up();
                } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                    down();
                }
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }
        });
    }

    @Override
    public void left() {
        int x = labelX;
        int y = labelY;

        if (x > 0) {
            x = labelX -= 40;
        }

        label.setLocation(x, y);
    }

    @Override
    public void right() {
        int x = labelX;
        int y = labelY;

        int xMax = SIZE_X - label.getWidth();

        if (x < xMax) {
            x = labelX += 40;				
        }

        label.setLocation(x, y);
    }

    @Override
    public void up() {
        int x = labelX;
        int y = labelY;
        // 왼쪽 위가 (0, 0)라서 -해야 위로 올라감

        if (y > 0) {
            y = labelY -= 40;
        }

        label.setLocation(x, y);
    }

    @Override
    public void down() {
        int x = labelX;
        int y = labelY;

        int yMax = SIZE_Y - label.getHeight();

        if (y < yMax) {
            y = labelY += 40;			
        }

        label.setLocation(x, y);
    }

    public static void main(String[] args) {
        new MoveLabelFrame3();
    }
}

 

실행

 

 

  - 뚝뚝 끊기지 않고 자연스럽게 움직이려면 '쓰레드'를 생성해서 사용해야 함

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > Swing (GUI)' 카테고리의 다른 글

[Java/Swing] 로또 게임 구현  (0) 2023.02.19
[Java/Swing] 윤년 계산기 구현  (0) 2023.02.18
[Java/Swing] MouseListener - 컴포넌트 이동시키기  (0) 2023.02.18
[Java/Swing] ActionListener - 배경 색 변경하기  (1) 2023.02.18
[Java/Swing] 메서드 및 함수 모음  (1) 2023.02.17
'Java/Swing (GUI)' 카테고리의 다른 글
  • [Java/Swing] 로또 게임 구현
  • [Java/Swing] 윤년 계산기 구현
  • [Java/Swing] MouseListener - 컴포넌트 이동시키기
  • [Java/Swing] ActionListener - 배경 색 변경하기
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (385)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • IT Notes (13)
      • Error Notes (17)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
      • etc. (0)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    Hotkeys
    errorNote
    C#
    Wordpress
    jQuery
    git
    면접
    개발일지
    Android
    Swing
    js
    CSS
    SpringBoot
    php
    cs
    http
    Codeigniter
    오블완
    SWAGGER
    jsp
    tailwindcss
    vuejs
    zapier
    HTML
    SEO
    티스토리챌린지
    typeScript
    SQL
    java
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Java/Swing] KeyListener - 이미지 움직이기
상단으로

티스토리툴바