목차
1. Key Listener 사용
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() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
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) {
}
@Override
public void keyPressed(KeyEvent e) {
// System.out.println("keyPressed : " + e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
// 문제 1
// 제어문을 활용해서 방향키 위 아래 왼쪽 오른쪽이 눌렀다가 때면
// 콘솔창에 한글로 위 아래 왼쪽 오른쪽 글자를 표기 하시오
if (e.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("위");
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("아래");
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("왼쪽");
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("오른쪽");
}
}
}
2. 미니게임 (오브젝트 움직이기)
방향키 입력에 따라 움직이는 오브젝트를 화면에 띄워서 움직여라
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 ONE_STEP = 10;
private final int UP_END = 10;
private final int LEFT_END = 10;
private final int RIGHT_END = 390;
private final int DOWN_END = 390;
public MiniGame1() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jPlayer = new JLabel("플레이어1");
jPlayer.setSize(100, 100);
}
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) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
System.out.println("위");
if (jPlayerY <= UP_END) {
jPlayerY = UP_END;
} else {
jPlayerY -= ONE_STEP;
}
jPlayer.setLocation(jPlayerX, jPlayerY);
break;
case KeyEvent.VK_LEFT:
System.out.println("왼쪽");
if (jPlayerX <= LEFT_END) {
jPlayerX = LEFT_END;
} else {
jPlayerX -= ONE_STEP;
}
jPlayer.setLocation(jPlayerX, jPlayerY);
break;
case KeyEvent.VK_RIGHT:
System.out.println("오른쪽");
if (jPlayerX >= RIGHT_END) {
jPlayerX = RIGHT_END;
} else {
jPlayerX += ONE_STEP;
}
jPlayer.setLocation(jPlayerX, jPlayerY);
break;
case KeyEvent.VK_DOWN:
System.out.println("아래");
if (jPlayerY >= DOWN_END) {
jPlayerY = DOWN_END;
} else {
jPlayerY += ONE_STEP;
}
jPlayer.setLocation(jPlayerX, jPlayerY);
break;
}
}
});
}
// 코드 테스트
public static void main(String[] args) {
new MiniGame1();
} // end of main
} // end of class
좌표 기반으로 설정 할때는
반드시 좌표와 사이즈를 설정해주어야 한다
3. 미니게임 (그림 위 그림 오브젝트 움직이기)
package ch06;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MiniGame2 extends JFrame{
JLabel backgroundMap;
JLabel player;
private int jPlayerX = 500;
private int jPlayerY = 535;
private final int FRAME_WIDTH = 1000;
private final int FRAME_HEIGHT = 600;
private final int PLAYER_WIDTH = 50;
private final int PLAYER_HEIGHT = 50;
private final int MOVE_DISTANCE = 30;
private final int UP_END = MOVE_DISTANCE;
private final int LEFT_END = 70;
private final int RIGHT_END = FRAME_WIDTH - PLAYER_WIDTH - 60;
private final int DOWN_END = FRAME_HEIGHT - PLAYER_HEIGHT - MOVE_DISTANCE;
public MiniGame2() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setSize(FRAME_WIDTH, FRAME_HEIGHT + 38);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
backgroundMap = new JLabel(new ImageIcon("images/backgroundMap.png"));
backgroundMap.setSize(FRAME_WIDTH, FRAME_HEIGHT);
backgroundMap.setLocation(0, 0);
player = new JLabel(new ImageIcon("images/playerR.png"));
player.setSize(PLAYER_WIDTH, PLAYER_HEIGHT);
player.setLocation(jPlayerX, jPlayerY);
}
private void setInitLayout() {
setLayout(null);
add(backgroundMap);
backgroundMap.add(player);
setVisible(true);
}
private void addEventListener() {
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
System.out.println("위");
if (jPlayerY <= UP_END) {
jPlayerY = UP_END;
} else {
jPlayerY -= MOVE_DISTANCE;
}
break;
case KeyEvent.VK_LEFT:
System.out.println("왼쪽");
if (jPlayerX <= LEFT_END + MOVE_DISTANCE) {
jPlayerX = LEFT_END;
} else {
jPlayerX -= MOVE_DISTANCE;
}
player.setIcon(new ImageIcon("images/playerL.png"));
break;
case KeyEvent.VK_RIGHT:
System.out.println("오른쪽");
if (jPlayerX >= RIGHT_END - MOVE_DISTANCE) {
jPlayerX = RIGHT_END;
} else {
jPlayerX += MOVE_DISTANCE;
}
player.setIcon(new ImageIcon("images/playerR.png"));
break;
case KeyEvent.VK_DOWN:
System.out.println("아래");
if (jPlayerY >= DOWN_END) {
jPlayerY = DOWN_END;
} else {
jPlayerY += MOVE_DISTANCE;
}
break;
}
player.setLocation(jPlayerX, jPlayerY);
}
});
}
// 코드 테스트
public static void main(String[] args) {
new MiniGame2();
}
}
'Java > Swing 프로젝트' 카테고리의 다른 글
Swing 스레드 활용 - 8 (0) | 2024.05.01 |
---|---|
Swing 로또 게임 만들기 - 7 (0) | 2024.04.30 |
Swing 이벤트 리스너 - 5 (0) | 2024.04.29 |
Swing image 위에 image - 4 (0) | 2024.04.29 |
Swing image 출력 - 3 (0) | 2024.04.29 |