본문 바로가기

IT/자바

키이벤트 ( 대각선 )

MyMain_KeyEvent.java

package mymain;

import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

//  awt ->확장 -> swing
//  Frame         JFrame

public class MyMain_KeyEvent extends JFrame implements KeyListener {

	//키상수
	public static final int LEFT 		= 1;
	public static final int UP 		= 2;
	public static final int RIGHT  	= 4;
	public static final int DOWN 		= 8;
	public static final int LEFTUP 	= LEFT | UP;
	public static final int LEFTDOWN 	= LEFT | DOWN;
	public static final int RIGHTUP 	= RIGHT | UP;
	public static final int RIGHTDOWN 	= RIGHT | DOWN;
	
	int key_state = 0;
	
	public MyMain_KeyEvent() {
		// TODO Auto-generated constructor stub
		super("내가만든 윈도우-동시키 처리");

		
		//키이벤트 등록
		this.addKeyListener(this);
		
		//위치
		//this.setLocation(200, 100);
		//크기지정
		//this.setSize(400, 300);

		// 위치 + 크기정보
		this.setBounds(200, 100, 400, 300);

		//보여줘라
		this.setVisible(true);

		//종료코드
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new MyMain_KeyEvent();
	}

	
//------------------------------------------------------	
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		int key = e.getKeyCode();
		if(key==KeyEvent.VK_LEFT) 
			key_state = key_state | LEFT;
		else if(key==KeyEvent.VK_UP) 
			key_state = key_state | UP;
		else if(key==KeyEvent.VK_RIGHT) 
			key_state = key_state | RIGHT;
		else if(key==KeyEvent.VK_DOWN) 
			key_state = key_state | DOWN;
		
		move_window();
		
	}

	

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		int key = e.getKeyCode();
		if(key==KeyEvent.VK_LEFT) 
			key_state = key_state ^ LEFT;
		else if(key==KeyEvent.VK_UP) 
			key_state = key_state ^ UP;
		else if(key==KeyEvent.VK_RIGHT) 
			key_state = key_state ^ RIGHT;
		else if(key==KeyEvent.VK_DOWN) 
			key_state = key_state ^ DOWN;
		
		move_window();
	}
	
	private void move_window() {
		// TODO Auto-generated method stub
		//현재위치 구하기
		Point pt = getLocation();
		
		int gan = 10;
		//위치변경
		if(key_state == LEFTUP) {
			pt.x -= gan;
			pt.y -= gan;
		}else if(key_state == LEFTDOWN) {
			pt.x -= gan;
			pt.y += gan;
			
		}else if(key_state == RIGHTUP) {
			pt.x += gan;
			pt.y -= gan;
			
		}else if(key_state == RIGHTDOWN) {
			pt.x += gan;
			pt.y += gan;
		}else if(key_state == LEFT) {
			pt.x -= gan;
		}else if(key_state == UP) {
			pt.y -= gan;
		}else if(key_state == RIGHT) {
			pt.x += gan;
			
		}else if(key_state == DOWN) {
			
			pt.y += gan;
		}
		
		
		//변경된 위치로 이동시키기
		setLocation(pt);
		
		
	}

}


'IT > 자바' 카테고리의 다른 글

키 이벤트( 총알 )  (0) 2018.05.09
instanceof 설명  (0) 2018.05.09
배경 바꾸기  (0) 2018.05.09
윈도우 메뉴 추가하기  (0) 2018.05.09
Anonymous(익명) 내부 클래스 참조변수가 없는 경우  (0) 2018.05.09