- [Java] 64. Swing: 키보드 리스너2024년 04월 30일
- Song hyun
- 작성자
- 2024.04.30.:49
728x90반응형[Java] 64. Swing: 키보드 리스너
*키보드 리스너Keyboard Listener는 키보드를 눌렀을 때, 호출되는 메서드를 가지는 인터페이스이다.
키보드 리스너에도 다양한 종류가 있는데, 대표적인 것은 아래와 같다.
(1) keyTyped: 사용자가 글자를 입력했을 때 호출되는 메서드이다.
(2) keyPressed: 사용자가 키를 눌렀을 때 호출되는 메서드이다.
(3) keyReleased: 사용자가 키를 눌렀다, 뗄 때 호출되는 메서드이다.
1. Swing: 키보드 리스너 응용 문제
-상, 하, 좌, 우 방향키를 누를 때마다, 해당 방향을 출력하는 코드를 작성해보자.
(1) getKeyCode();를 통해, 특정 키가 눌러졌을 때 반환되는 keyPressed 값을 알 수 있다.
(2) (1)에서의 결과를 통해, 각각의 방향키가 e.getKeyCode()의 반환 값과 동일한지 비교한 후,
맞으면 방향을 출력하는 if문을 작성한다.
package ch06; public class MyKeyEventTest{ public static void main(String[] args) { new MyKeyEvent(); } }
package ch06; import java.awt.BorderLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JTextArea; /* * 키 이벤트 리스너 사용해보기 */ public class MyKeyEvent extends JFrame implements KeyListener{ private JTextArea textArea; public MyKeyEvent() { initDate(); setInitLayout(); addEventListener(); } private void initDate() { setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); super.setResizable(false); // 프레임 사이즈 조절 불가 textArea = new JTextArea(); } private void setInitLayout() { // 좌표 기준으로 셋팅하고 싶다면 null을 넣자. setLayout(new BorderLayout()); add(textArea); setVisible(true); } private void addEventListener() { // textArea 위에서 사용자기 키보드를 누르면 감지해서 // 나에게 (코드 기준) 알려줘 textArea.addKeyListener(this); } @Override public void keyTyped(KeyEvent e) { // 응답 받고 싶다면 1 //System.out.println(e.toString()); } @Override public void keyPressed(KeyEvent e) { // 응답 받고 싶다면 2 } @Override public void keyReleased(KeyEvent e) { final int LEFT=37; final int UP=38; final int RIGHT=39; final int DOWN=40; if(e.getKeyCode()==LEFT) { System.out.println("좌"); } else if (e.getKeyCode()==UP) { System.out.println("상"); } else if (e.getKeyCode()==RIGHT) { System.out.println("우"); } else if (e.getKeyCode()==DOWN) { System.out.println("하"); } else { System.out.println("keyPressed : "+e.getKeyCode()); } // 응답 받고 싶다면 3 // 문제 1. // 제어문을 활용해서, 방향키 위 아래 왼쪽 오른쪽이 눌렀다가 떼면, // 콘솔창에 한글로 위 아래 왼쪽 오른쪽 글자를 표기하시오. } }
2. Swing: 키보드 리스너 응용 문제
-상, 하, 좌, 우 방향키를 누를 때마다, 글자를 움직이는 코드를 작성해보자.
*컴포넌트의 위치를 나타내는 x,y좌표, 이동 범위에 일반적인 수가 아닌 변수를 선언한다.
아래의 코드를 읽으면 jPlayerX,jPlayerY가 각각 x,y좌표를 나타낸다는 것을 알 수 있다.
움직일 범위를 나타내는 MOVE_INSTANCE는 변하지 않아도 되기 때문에 상수(final)로 선언한다.
If문에 입력받은 방향키를 입력하고(ex: 상을 눌렀다면... /하를 눌렀다면... )
해당 방향키를 입력받았을 때, 해당 좌표를 이동시키는 식으로 선언부를 작성한다.
(ex: if(e.getKeycode()==KeyEvent.VK_UP){
jPlayerY-=MOVE_INSTANCE})
package ch06; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JLabel; public class MiniGame extends JFrame implements KeyListener { private JLabel jPlayer; // 변수=변하는 수 private int jPlayerX = 100; private int jPlayerY = 100; private final int MOVE_INSTANCE = 5; private final int FRAME_WIDTH = 500; private final int FRAME_HEIGHT = 500; private final String PLAYER_NAME = "야스오"; private final int PLAYER_WIDTH = 100; private final int PLAYER_HEIGHT = 100; public MiniGame() { initData(); setInitLayout(); addEventListener(); setVisible(true); } private void initData() { setSize(FRAME_WIDTH, FRAME_HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jPlayer = new JLabel(PLAYER_NAME); jPlayer.setSize(jPlayerX, jPlayerY); } private void setInitLayout() { // 좌표 기반의 배치 관리자 setLayout(null); add(jPlayer); jPlayer.setLocation(PLAYER_WIDTH, PLAYER_HEIGHT); } private void addEventListener() { // jPlayer 객체에게서만 keyListener 동작을 시키고자 한다면 // 익명 구현클래스로 KeyListener 인터페이스를 재정의할 수 있다. this.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyPressed(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); } }); } public static void main(String[] args) { new MiniGame(); } @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 } }
728x90반응형'Java > 자바 Swing' 카테고리의 다른 글
[Java] 66. Swing: 랜덤 숫자 게임 만들기 (0) 2024.04.30 [Java] 65. Swing: 키보드 리스너 응용하기 (0) 2024.04.30 [Java] 63. Swing: 리스너 응용-리스너를 구현하는 두 가지 방법 (0) 2024.04.29 [Java] 62. Swing: 이벤트 리스너 (0) 2024.04.29 [Java] 61. Swing: 이미지 겹치기 (0) 2024.04.29 다음글이전글이전 글이 없습니다.댓글