기본 코드 작성
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;
private final int UP = 38; // 상수를 사용할 수 있다.
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("KeyEvent : " + e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
// 응답 받고 싶다면 3
// 문제 1
// 제어문을 활용해서 방향키 위, 아래, 왼쪽, 오른쪽이 눌렀다가 때면
// 콘솔창에 한글로 위, 아래, 왼쪽, 오른쪽 글자를 표기 하시오
if (e.getKeyCode() == 37) {
System.out.println("왼쪽");
} else if (e.getKeyCode() == UP) { // final int 상수를 사용해도 된다.
System.out.println("위");
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { // KeyEvent를 사용해도 된다.
System.out.println("오른쪽");
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("아래");
}
}
} // end of class

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;
public MiniGame1() {
initData(); // 메서드
setInitLayout(); // 메서드
setEventListener(); // 메서드
} // 생성자
private void initData() {
setSize(500, 500); //
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jPlayer = new JLabel("플레이어1");
jPlayer.setSize(200, 100);
}
private void setInitLayout() {
// 좌표 기반으로 배치관리자 변경
setLayout(null);
add(jPlayer);
jPlayer.setLocation(100, 100);
setVisible(true);
}
private void setEventListener() {
// jPlayer 객체에게서만 keyListener 동작을 시키고자 한다면
// 익명 구현 클래스로 KeyListener 인터페이스를 재 정의할 수 있다.
// jPlayer.addKeyListener(this); // 인터페이스 없어서 안됨
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
jPlayer.setLocation(100, 50);
System.out.println("위");
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
jPlayer.setLocation(50, 50);
System.out.println("왼쪽");
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
jPlayer.setLocation(200, 50);
System.out.println("오른쪽");
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
jPlayer.setLocation(100, 350);
System.out.println("아래");
}
}
});
}
public static void main(String[] args) {
new MiniGame1();
}
}
문제 위,아래,왼쪽, 오른쪽 50씩 이동시켜라
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 MOVDE_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) {
if(e.getKeyCode() == KeyEvent.VK_UP) {
jPlayerY -= MOVDE_DISTANCE;
} else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
jPlayerX -= MOVDE_DISTANCE;
} else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
jPlayerX += MOVDE_DISTANCE;
} else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
jPlayerY += MOVDE_DISTANCE;
}
jPlayer.setLocation(jPlayerX, jPlayerY);
}
});
}
// 코드 테스트
public static void main(String[] args) {
new MiniGame1();
} // end of main
} // end of class
package ch06;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class test01 extends JFrame {
private JLabel backgroundMap;
private JLabel player1;
private JLabel player2;
private JLabel player3;
private int playerX = 100;
private int playerY = 100;
public test01() {
initData();
setInitData();
setEventListner();
}
public void setEventListner() {
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
playerY -= 10;
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
playerX -= 10;
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
playerX += 10;
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
playerY += 10;
}
player1.setLocation(playerX, playerY);
player2.setLocation(playerX, playerY);
}
});
}
public void initData() {
setTitle("Swing 6");
setSize(600, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Icon icon = new ImageIcon("images2/backgroundMap.png"); // 업 캐스팅 된 상태
// backgroundMap = new JLabel(icon);
backgroundMap = new JLabel(new ImageIcon("images2/backgroundMap.png"));
backgroundMap.setSize(1000, 600); // 그림 사이즈 1000 600
backgroundMap.setLocation(0, 0); // x좌표 0 y 좌표 0 부터 그림을 그려라
// Icon icon2 = new ImageIcon("images2/playerR.png"); // 업 캐스팅 된 상태
// player = new JLabel(icon2);
player1 = new JLabel(new ImageIcon("images2/playerR.png"));
player1.setSize(100, 45);
player1.setLocation(300, 180);
Icon icon3 = new ImageIcon("images2/playerL.png");
player2 = new JLabel(icon3);
}
public void setInitData() {
// 좌표 기반으로 배치관리자 설정
setLayout(null);
add(backgroundMap);
backgroundMap.add(player1, player2);
setVisible(true);
player1.setLocation(playerX, playerY);
}
public static void main(String[] args) {
new test01();
}
}

'Java' 카테고리의 다른 글
| 2024.05.01 JAVA 유용한 클래스 자바 Thread (0) | 2024.05.01 |
|---|---|
| 2024.04.30 Swing -7 (로또 게임 만들기) (0) | 2024.04.30 |
| 2024.04.30 JAVA 유용한 클래스 디자인 패턴 템플릿 메서드 패턴 (0) | 2024.04.30 |
| 2024.04.30 JAVA 유용한 클래스 디자인 패턴 싱글톤 패턴 (0) | 2024.04.30 |
| 2024.04.29 Swing - 5 (이벤트 리스너) (0) | 2024.04.29 |