자바 대각선으로 움직이기[swing]

자바 대각선으로 움직이기[swing]

안녕하세요.

오늘은 저번에 만들었던 키보드 이벤트를 조금 업그레이드시켜보려고 합니다.

저번에 만들었던 키보드 이벤트로는 버튼을 상하좌우로만 움직일 수 있었습니다.

그 이벤트를 조금 업그레이드해서 대각선으로도 이동할 수 있도록 해보겠습니다.

  • 프레임 만들기.
  • 키보드 이벤트 업그레이드.
  • 결과

프레임 만들기

일단 아래 글을 참고해서 swing창을 만들어줍니다.

(프레임 만드는 방법.)

[프로그래밍/JAVA] - java swing 창 만들기

 

java swing 창 만들기

자바 스윙(java swing) 창 만들기 자바에서 gui시작하기. JFrame을 이용해 창을 만드는 방법입니다. 1. Main.java만들기 2. program.java만들기 3. JFrame상속(gui기반의 프로그램을 만들기 위해 상속) 4. JFrame..

intunknown.tistory.com

사용할 패널의 코드는 아래와 같습니다.

package test01;
import javax.swing.JFrame;

public class Main extends JFrame{
	public Main() {
		homeframe();//homeframe함수를 실행
	}
	/*프레임 설정*/
	public void homeframe() {
		setTitle("1");//타이틀
		setSize(400,400);//프레임의 크기
		setResizable(false);//창의 크기를 변경하지 못하게
		setLocationRelativeTo(null);//창이 가운데 나오게
		setLayout(null);//레이아웃 설정
		setVisible(true);//창이 보이게	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//JFrame이 정상적으로 종료되게
	}
	/*메인함수*/
	public static void main(String[] args){
		new Main(); //실행하면 생성자가 실행됨.
	}
}

키보드 이벤트 업그레이드.

이번 글에서는 아래의 글에서 작성한 키보드 이벤트를 업그레이드할 겁니다.

[프로그래밍/JAVA] - [java]자바 스윙 키보드, 마우스 이벤트

 

[java]자바 스윙 키보드, 마우스 이벤트

Java swing Event 1. 자바 스윙 창을 만든다 아래 링크 참고. [JAVA] - java swing 창 만들기 2. 버튼을 만든다.(이미지는 나중에) 3. 키 이벤트를 만든다. 자바 스윙 키보드, 마우스 이벤트 코드. 아래 있는 코..

intunknown.tistory.com

아래 코드는 위의 글에서 사용한 키보드 이벤트를 프레임에 적용시킨 코드입니다.

이제 아래의 코드를 업그레이드해보겠습니다.

package test01;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Main2 extends JFrame{
	/*버튼*/
	static JButton b1=new JButton("버튼1");
    /*생성자*/
	public Main2() {
		homeframe();
		b1.setBounds(0, 0, 20, 20);//버튼1의 위치 설정
		mbutton1();
		add(b1);//프레임에 패널을 추가
		
	}
	/*프레임 설정*/
	public void homeframe() {
		setTitle("1");//타이틀
		setSize(400,400);//프레임의 크기
		setResizable(false);//창의 크기를 변경하지 못하게
		setLocationRelativeTo(null);//창이 가운데 나오게
		setLayout(null);//레이아웃 설정
		setVisible(true);//창이 보이게	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//JFrame이 정상적으로 종료되게
	}
    /*키보드 이벤트*/
	void mbutton() {
		b1.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {//키 코드로 스위치
					case KeyEvent.VK_DOWN: //방향키(아래) 눌렀을때 
						b1.setLocation(b1.getX(), b1.getY()+10); 
						break; 
					case KeyEvent.VK_UP: //방향키(위)눌렀을때  
						b1.setLocation(b1.getX(), b1.getY()-10); 
						break; 
					case KeyEvent.VK_LEFT:// 방향키(왼)눌렀을때 
						b1.setLocation(b1.getX()-10, b1.getY()); 
						break; 
					case KeyEvent.VK_RIGHT:// 방향키(오른)눌렀을때 
						b1.setLocation(b1.getX()+10, b1.getY()); 
						break; 
					default: 
						break; 
				}
			}
		});
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Main2();
	}
}

먼저 boolean형식의 변수를 4개 추가하고 모두 false로 초기화합니다.

boolean upP = false; 
boolean downP = false; 
boolean leftP = false; 
boolean rightP = false; 

그 후 이런 식으로 코드를 추가합니다.

1. 키보드를 눌렀을 때 위에 추가해준 boolean형식의 변수를 true로 만들어줍니다.

2. true일 때 해당 방향으로 움직이게 해주는 코드입니다.

3. 키보드에서 손가락을 떼면 keyReleased에서 boolean변수를 모두 false로 만들어서 움직이지 않도록 해줍니다.

void mbutton() {
		b1.addKeyListener(new KeyAdapter() {
			@Override
            /*키를 눌렀을때 호출*/
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {//키 코드로 스위치
					case KeyEvent.VK_DOWN: //방향키(아래) 눌렀을때 
						downP = true; 
						//Home.b1.setLocation(Home.b1.getX(), Home.b1.getY()+10); 
						break; 
					case KeyEvent.VK_UP: //방향키(위)눌렀을때 
						upP = true; 
						//Home.b1.setLocation(Home.b1.getX(), Home.b1.getY()-10); 
						break; 
					case KeyEvent.VK_LEFT:// 방향키(왼)눌렀을때 
						leftP = true; 
						//Home.b1.setLocation(Home.b1.getX()-10, Home.b1.getY()); 
						break; 
					case KeyEvent.VK_RIGHT:// 방향키(오른)눌렀을때 
						rightP = true; 
						//Home.b1.setLocation(Home.b1.getX()+10, Home.b1.getY()); 
						break; 
					default: 
						break; 
				}
				if (upP) { 
					b1.setLocation(b1.getX(), b1.getY()-10);
				} 
				if (downP) { 
					b1.setLocation(b1.getX(), b1.getY()+10);
				} 
				if (leftP) { 
					b1.setLocation(b1.getX()-10, b1.getY());
				} 
				if (rightP) { 
				    b1.setLocation(b1.getX()+10, b1.getY()); 
				} 		 
			}
			@Override
            /*키보드에서 손을 떼었을때 호출*/
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
				if(e.getKeyCode()==KeyEvent.VK_UP) {
					upP = false;
				}
				else if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
				    downP = false; 
				} 
				else if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
				    leftP = false; 
				} 
				else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
				    rightP = false; 
				} 
			}

		});
	}

위의 코드를 모두 넣은 코드는 아래와 같습니다.

package test01;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Main2 extends JFrame{
	/*버튼*/
	static JButton b1=new JButton("버튼1");
	/*키보드 이벤트 업그레이드*/
	boolean upP = false; 
	boolean downP = false; 
	boolean leftP = false; 
	boolean rightP = false; 
	/*생성자*/
	public Main2() {
		homeframe();
		b1.setBounds(0, 0, 20, 20);//버튼1의 위치 설정
		mbutton();
		add(b1);//프레임에 패널을 추가
	}
	/*프레임 설정*/
	public void homeframe() {
		setTitle("1");//타이틀
		setSize(400,400);//프레임의 크기
		setResizable(false);//창의 크기를 변경하지 못하게
		setLocationRelativeTo(null);//창이 가운데 나오게
		setLayout(null);//레이아웃 설정
		setVisible(true);//창이 보이게	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//JFrame이 정상적으로 종료되게
	}
	/*키보드 이벤트 업그레이드*/
	void mbutton() {
		b1.addKeyListener(new KeyAdapter() {
			@Override
			/*키보드를 눌렀을 때*/
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {//키 코드로 스위치
					case KeyEvent.VK_DOWN: //방향키(아래) 눌렀을때 
						downP = true; 
						//Home.b1.setLocation(Home.b1.getX(), Home.b1.getY()+10); 
						break; 
					case KeyEvent.VK_UP: //방향키(위)눌렀을때 
						upP = true; 
						//Home.b1.setLocation(Home.b1.getX(), Home.b1.getY()-10); 
						break; 
					case KeyEvent.VK_LEFT:// 방향키(왼)눌렀을때 
						leftP = true; 
						//Home.b1.setLocation(Home.b1.getX()-10, Home.b1.getY()); 
						break; 
					case KeyEvent.VK_RIGHT:// 방향키(오른)눌렀을때 
						rightP = true; 
						//Home.b1.setLocation(Home.b1.getX()+10, Home.b1.getY()); 
						break; 
					default: 
						break; 
				}
				if (upP) { 
					b1.setLocation(b1.getX(), b1.getY()-10);
				} 
				if (downP) { 
					b1.setLocation(b1.getX(), b1.getY()+10);
				} 
				if (leftP) { 
					b1.setLocation(b1.getX()-10, b1.getY());
				} 
				if (rightP) { 
				    b1.setLocation(b1.getX()+10, b1.getY()); 
				} 		 
			}
			@Override
			/*키보드에서 손을 떼었을 때*/
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
				if(e.getKeyCode()==KeyEvent.VK_UP) {
					upP = false;
				}
				else if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
				    downP = false; 
				} 
				else if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
				    leftP = false; 
				} 
				else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
				    rightP = false; 
				} 
			}

		});
	}
	/*메인함수*/
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Main2();
	}
}

실행결과

이제 위의 코드를 실행하면 대각선으로도 이동할 수 있고 왼쪽과 오른쪽 방향키를 누르고 있으면 움직이지 않게 됩니다.

초기.

아래와 오른쪽 방향키를 누르고 조금 지난 후.

동영상이 보기 편하지만 제가 귀찮아서 Pass~

Designed by JB FACTORY