Java/Java Swing

Swing - 6 (Key Listener)

도준영 2024. 7. 15. 16:06

시나리오 코드

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();
	}
}

 

 

 

 

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("아래");
		}
	}
}

 

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 > Java Swing' 카테고리의 다른 글

Swing - 8 (쓰레드 활용)  (0) 2024.07.15
Swing - 7 로또 게임 만들기  (0) 2024.07.15
Swing - 5 (이벤트 리스너)  (0) 2024.07.03
Swing - 4 (이미지 겹치는 방법)  (0) 2024.07.03
Swing - 3 (이미지 올리기)  (0) 2024.05.31