package ch06;
import java.awt.BorderLayout;
import java.awt.Color;
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() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
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
System.out.println("keyPressed : " + e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
// 문제 1
// 제어문을 활용해서 방향키 위 아래 왼쪽 오른쪽이 눌렀다가 떼면
// 콘솔창에 한글로 위 아래 왼쪽 오른쪽 글자를 표기하시오
// 38 40 37 39
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("왼쪽");
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("위");
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("오른쪽");
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("아래");
}
}
}
package ch06;
public class MyKeyEventTest {
public static void main(String[] args) {
new MyKeyEvent();
}
}
미니게임
package ch06;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MiniGame1 extends JFrame {
private JLabel jplayer;
private int jPlayerX = 100;
private int jPlayerY = 100;
private final int MOVE_DISTANCE = 50;
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 MiniGame1() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setSize(FRAME_WIDTH, FRAME_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jplayer = new JLabel(PLAYER_NAME);
jplayer.setSize(PLAYER_WIDTH, PLAYER_HEIGHT);
}
private void setInitLayout() {
setLayout(null); // 좌표기반으로 배치관리자 변경
add(jplayer);
jplayer.setLocation(jPlayerX, jPlayerY);
setVisible(true);
}
private void addEventListener() {
// jplayer 객체한테만 keyListener 동작을 시키고자 한다면
// 익명 구현클래스로 KeyListener 인터페이스를 재정의 할 수 있다.
// jplayer.addKeyListener(this);
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
// int x = jplayer.getX();
// int y = jplayer.getY();
// if (e.getKeyCode() == KeyEvent.VK_UP) {
// jplayer.setLocation(x, y - 10);
// } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
// jplayer.setLocation(x - 10, y);
// } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
// jplayer.setLocation(x + 10, y);
// } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
// jplayer.setLocation(x, y + 10);
// }
if (e.getKeyCode() == KeyEvent.VK_UP) {
jPlayerY -= MOVE_DISTANCE;
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
jPlayerX -= MOVE_DISTANCE;
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
jPlayerX += MOVE_DISTANCE;
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
jPlayerY += MOVE_DISTANCE;
}
jplayer.setLocation(jPlayerX, jPlayerY);
}
});
}
// 코드 테스트
public static void main(String[] args) {
new MiniGame1();
} // end of main
}
'Java > Swing' 카테고리의 다른 글
Swing - 로또 게임 만들기 (0) | 2024.05.02 |
---|---|
Swing - EventListener (0) | 2024.05.02 |
Swing - 이미지 올리기, 겹치기 (0) | 2024.04.29 |
Swing - 2 (0) | 2024.04.26 |
Swing 프로젝트 (0) | 2024.04.25 |