시나리오 코드 1
package ch06;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTextArea;
/**
* 키 이벤트 리스너 사용해보기
*/
public class MyKeyEvent extends JFrame {
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() {}
// 코드 테스트
public static void main(String[] args) {
new MyKeyEvent();
}
}
시나리오 코드 1 - 풀이
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);
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
// 제어문을 활용해서 방향기 위 아래 왼쪽 오른쪽이 눌렀다가 때면
// 콘솔창에 한글로 위 아래 왼쪽 오른쪽 글자를 표기 하시오
System.out.println("keyCode : " + e.getKeyCode());
if(e.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("위");
} else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("왼쪽");
} else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("오른쪽");
} else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("아래");
}
}
}
시나리오 코드 2
package ch06;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MiniGame1 extends JFrame {
private JLabel jPlayer;
public MiniGame1() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jPlayer = new JLabel("플레이어1");
}
private void setInitLayout() {
// 좌표 기반으로 배치관리자 변경
setLayout(null);
add(jPlayer);
setVisible(true);
}
private void addEventListener() {}
// 코드 테스트
public static void main(String[] args) {
new MiniGame1();
} // end of main
} // end of class
시나리오 코드 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;
public MiniGame1() {
initData();
setInitLayout();
addEventListener();
}
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 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) {
jPlayer.setLocation(100, 50);
} else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
jPlayer.setLocation(50, 50);
} else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
jPlayer.setLocation(200, 50);
} else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
jPlayer.setLocation(100, 350);
}
}
});
}
// 코드 테스트
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.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
'Java > Swing' 카테고리의 다른 글
Swing - 8 (쓰레드 활용) (0) | 2024.05.03 |
---|---|
Swing 로또 게임 만들기 - 7 (0) | 2024.04.30 |
Swing - 5 (이벤트 리스너) (0) | 2024.04.29 |
Swing - 4 (이미지 겹치는 방법) (0) | 2024.04.29 |
Swing - 3 (이미지 올리기) (0) | 2024.04.29 |