- [Java] 65. Swing: 키보드 리스너 응용하기2024년 04월 30일
- Song hyun
- 작성자
- 2024.04.30.:35
728x90반응형[Java] 65. Swing: 키보드 리스너 응용하기
*참고하면 좋은 글: 키보드 리스너
https://whatsthatsound.tistory.com/121
Swing: 키보드 리스너 응용하기(공룡 게임)
아래와 같이 background에 이미지를 삽입하고,
캐릭터 이미지를 겹쳐 입력한 뒤, 방향키를 누르면 위치가 이동하게끔 만들어보자.
*MiniGame2: 코드 들여다 보기
(1) 상속 및 인터페이스
MiniGame2 클래스는 각각 JFrame을 상속하고, KeyListener 인터페이스를 implements한다.
(2) 멤버 변수
-이미지를 삽입하기 위해 jPlayer,backgroundMap이라는 JLabel 객체를 생성한다.
-jPlayer의 위치를 나타내는 x,y좌표의 수치를 int형 변수로 선언한다.
-방향키를 누를 때마다 객체가 이동하는 거리(=MOVE_INSTANCE)를 상수로 선언한다.
(3) 사용자 정의 생성자
-initData(): 기본적인 크기, 이미지 삽입 등이 이루어지는 메서드.
-setInitLayout(): 배치관리자를 설정한 뒤, 두 객체를 삽입하고, 위치를 설정한다.
-addEventListener():
-setVisible(true): 창이 보이게 설정한다.
(4) initData() 메서드
-setSize: 창의 크기를 가로세로 각각 500으로 설정한다.
-setDefaultCloseOperation: 창의 x버튼을 눌렀을 때 무엇을 실행할 것인지 설정한다.
-jPlayer=new JLabel(new ImageIcon("playerL.png")); : jPlayer 객체를 업캐스트하는 동시에, 이미지를 삽입한다.
-jPlayer.setSize: JPlayer의 사이즈(이미지 크기)를 50x50으로 설정한다.
(5) setInitLayout() 메서드
-setLayout(): 아무것도 입력하지 않았으므로, 가장 기본적인 설정인 FlowLayout이 설정된다.
-add(backgroundMap): 객체 backgroundMap을 창에 삽입한다.
-backgroundMap.add(jPlayer): 객체 백그라운드 위에 jPlayer를 삽입한다.
-jPlayer.setLocation: 객체 jPlayer의 위치를 설정한다.(6) addEventListener() 메서드
*인터페이스 KeyListener로부터 받아온 메서드들이 들어있다.
-keyTyped(): 키를 입력받았을 때 반응한다.
-keyPressed(): 키가 눌러졌을 때 반응한다.
-ketReleased(): 키가 눌렀다 떼어질 때 반응한다.
**keyReleased()
-입력받은 값(e.getKeyCode())를 방향키의 event값과 비교하는 if문을 작성한다.
-입력받은 값에 따라 MOVE_INSTANCE만큼 x,y좌표를 이동시킨다.package ch06; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.ImageIcon; public class MiniGame2 extends JFrame implements KeyListener { private JLabel jPlayer; private JLabel backgroundMap; private int jPlayerY=50; private int jPlayerX=50; private final int MOVE_INSTANCE=10; public MiniGame2() { initData(); setInitLayout(); addEventListener(); setVisible(true); } private void initData() { setSize(500,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jPlayer=new JLabel(new ImageIcon("playerL.png")); jPlayer.setSize(50,50); backgroundMap=new JLabel(new ImageIcon("backgroundMap.png")); Icon icon = new ImageIcon("backgroundMap.png"); backgroundMap = new JLabel(icon); backgroundMap.setSize(500,500); backgroundMap.setLocation(0,0); } private void setInitLayout() { setLayout(null); add(backgroundMap); backgroundMap.add(jPlayer); jPlayer.setLocation(250,340); } private void addEventListener() { this.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_UP) { jPlayerY -= MOVE_INSTANCE; } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { jPlayerX -= MOVE_INSTANCE; } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { jPlayerX += MOVE_INSTANCE; } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { jPlayerY += MOVE_INSTANCE; } jPlayer.setLocation(jPlayerX, jPlayerY); } }); } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } public static void main(String[] args) { new MiniGame2(); } }
728x90반응형'Java > 자바 Swing' 카테고리의 다른 글
[Java] 70. Swing: 버블버블 게임 만들기(1) (0) 2024.05.02 [Java] 66. Swing: 랜덤 숫자 게임 만들기 (0) 2024.04.30 [Java] 64. Swing: 키보드 리스너 (0) 2024.04.30 [Java] 63. Swing: 리스너 응용-리스너를 구현하는 두 가지 방법 (0) 2024.04.29 [Java] 62. Swing: 이벤트 리스너 (0) 2024.04.29 다음글이전글이전 글이 없습니다.댓글