JAVA 상하좌우 키보드로 이미지를 이동시키기

728x90
이번 실습 자료는 JAVA에서 오브젝트 이미지를 상하좌우 키보드를 눌러서 이동시키는 예제입니다.
고양이 파일은 포함되어 있지 않으나 폴더는 별도의 지정 폴더를 세팅해주세요.
코드 따라 치기가 불편하신 분은 아래 파일을 다운 받아주세요.



package pack1; // 패키지명은 사용자 환경에 맞게 다시 적어야 됨
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class KeyEvent extends JFrame implements KeyListener{
       Image image;
       int x = 100, y = 100, sel = 1;
       
       public KeyEvent() {
              super("고양이"); // 프로그램 명
              
              //프로그램 창에 아이콘 이미지 표시, 파비콘
              setIconImage(Toolkit.getDefaultToolkit().getImage("c:/work/pack/cat1.png")); // 파비콘 위치
              
              setLayout(null);      //레이아웃 매니저 사용 안함
              setResizable(false);  //창 크기 고정
              setBounds(200, 200, 300, 300); //창 크기 지정
              setBackground(Color.WHITE); //창 배경 색상 지정
              setVisible(true);
              
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프로그램 닫힘 설정
              
              addKeyListener(this);  //frame에 KeyListener 장착
              
              x = (int)getWidth() / 2;   //frame의 너비 얻기
              y = (int)getHeight() / 2;
       }
       
       @Override
       public void keyPressed(java.awt.event.KeyEvent e) {
              int key = e.getKeyCode();
                     if(key == e.VK_RIGHT ||
                           key == e.VK_NUMPAD6 || //숫자키 NUMPAD
                                  key == e.VK_KP_RIGHT) {
                     sel = (sel == 1)?2:1;  //삼항연산자
                     x = (x < getWidth())?x + 10 : -image.getWidth(this);
                     }
                     else{int key1 = e.getKeyCode();
                                  if(key1 == e.VK_LEFT ||
                                         key1 == e.VK_NUMPAD4 || //숫자키 NUMPAD
                                                key1 == e.VK_KP_LEFT) {
                                  sel = (sel == 1)?3:1;  //삼항연산자
                                  x = (x > 0)?x - 10 :getWidth() + image.getWidth(this);
                     }
                                  int key2 = e.getKeyCode();
                                  if(key2 == e.VK_UP ||
                                         key2 == e.VK_NUMPAD8 || //숫자키 NUMPAD
                                                key2 == e.VK_KP_UP) {
                                  sel = (sel == 1)?4:1;  //삼항연산자
                                  y = (y > 0)?y - 10 : getHeight() + image.getHeight(this);
                                         
                     }
                                  int key3 = e.getKeyCode();
                                  if(key3 == e.VK_DOWN ||
                                         key3 == e.VK_NUMPAD2 || //숫자키 NUMPAD
                                                key3 == e.VK_KP_DOWN) {
                                  sel = (sel == 1)?4:1;  //삼항연산자
                                  y = (y < getHeight())?y + 10 : image.getWidth(this);
                                  
              
       }
       }
       repaint(); //한번 실행하면 다시 원래 이미지로 복귀
       }
              
       
       @Override
       public void paint(Graphics g) {
              switch (sel) {
              case 1:
                     image = Toolkit.getDefaultToolkit().getImage("c:/work/pack/cat1.png"); 
//고양이 이미지1 - 폴더는 개별로 다시 지정해야 됨
                     break;
              case 2:
                     image = Toolkit.getDefaultToolkit().getImage("c:/work/pack/cat2.png"); 
//고양이 이미지2 - 폴더는 개별로 다시 지정해야 됨
                     break;
                     
              case 3:
                     image = Toolkit.getDefaultToolkit().getImage("c:/work/pack/cat3.png"); 
//고양이 이미지3 - 폴더는 개별로 다시 지정해야 됨
                     break;
                     
              case 4:
                     image = Toolkit.getDefaultToolkit().getImage("c:/work/pack/cat4.png"); 
//고양이 이미지4 - 폴더는 개별로 다시 지정해야 됨
                     break;
              }
              
              g.clearRect(0, 0, getWidth(), getHeight());  //화면의 잔상 클리어하고 프로그램 시작
              g.drawImage(image,
                           x - image.getWidth(this) / 2,
                           y - image.getHeight(this) / 2, this);
       }
       
       @Override
       public void keyReleased(java.awt.event.KeyEvent arg0) {}
       @Override
       public void keyTyped(java.awt.event.KeyEvent arg0) {}
       
       public static void main(String[] args) {
              new KeyEvent();
       }
}






본 포스팅은 IT 교육기관인 KIC 캠퍼스의 지원을 받은 리포트입니다.
본문은 '남궁성, JAVA의 정석 3rd Edition' 교재를 공부하면서 주요 내용을 요약하고 있습니다.
혹시 잘못되거나 문제 소지시 댓글 남겨주시면 조치하겠습니다.


728x90

'DEV' 카테고리의 다른 글

JAVA 조건문과 반복문  (0) 2018.01.10
JAVA 연산자 요약  (0) 2018.01.09
JAVA 메모장 예제  (0) 2018.01.09
JAVA 미디어(WAV) 재생 예제  (2) 2018.01.09
JAVA 변수에 관해  (0) 2018.01.09
JAVA 설치 및 환경변수 세팅 방법  (0) 2018.01.05