simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 404
  • 참조타입
  • 자바
  • null
  • 컨트롤러
  • controllerTest
  • 자바프로그램
  • 참조변수
  • 자바메모리구조
  • scanner #next() #nextLine()
  • JVM메모리구조
  • 스프링
  • 자바프로그래밍

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

Language/Java

[자바API_AWT/Swing] 키보드 이벤트 구현하기

2022. 3. 28. 01:45

■ 사용할 객체

▶ KeyAdaptor

- KeyListener를 구현한 추상클래스이다. 

- getKeyCode() : void    ----  Virtual Code를 확인할 수 있다.

  [참고 : 키보드 정보가 들어오는 방식]
   - 각 회사의 키보드 -> OS/JVM에서 Virtual Key Code로 받음(각 회사 키보드 동일하게 인식)
   - 키보드의 shift+[  ] 예를 들어, 소문자 a를 인식하는 게 아니다. (문자는 모두 대문자로 인식)
   - 말그대로 어떤 키보드를 눌렀는지를 값으로 받는다.

▶ KeyEvent

- VK_xxxxx : Virtual Code Key를 의미하는 상수로, 언더바(_) 다음에 "LEFT","RIGHT","Q","R"등 키보드 키에 대한 상수를 받을 수 있다.

▶ Dimension

- Dimension객체 생성 후, 인스턴스 변수 width/height를 통해 현재 사용하는 컴퓨터의 화면 해상도 얻기 

▶ Toolkit

- Dimension객체를 생성할 때 사용할 클래스다.

- Toolkit : 자원(이미지등) 정보 구하는 객체

- getDefaultToolkit().getScreenSize() : 툴키트 안의 해상도 사이즈를 구하는 메소드이다.

▶ Point

- (x,y)좌표를 입력할 수 있는 객체이다.

 

 

■ 키보드 좌(<-)/우(->)/상/하를 누를 때 윈도우창 이동시키기 (단, 모니터 화면 밖으로 나갈 수 없다.)

package window;

import java.awt.Dimension;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;

public class MoveExceptMonitor extends JFrame{
	int screen_w,screen_h; //모니터 화면 해상도 크기
	
	public MoveExceptMonitor() throws HeadlessException {
		super("KeyEvent 연습");
		this.setSize(400,400);
		this.setLocation(200,200);
		this.setVisible(true);
		this.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
			
		});
		
		//화면 해상도 구하기
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		screen_w = d.width;
		screen_h = d.height;
		
		//키보드초기화
		//키보드 입력시 이벤트를 어떻게 발생시킬 것인지 작성
		init_key_event();
	}
	
	private void init_key_event() {
		KeyAdapter adapter = new KeyAdapter() {

			@Override
			public void keyPressed(KeyEvent e) {
				//눌린 키 정보 얻어보기
				int key = e.getKeyCode();
				
				//현재 윈도우의 위치
				//Point pt = MoveExceptMonitor.this.getLocation();
				Point pt = getLocation();
				
				//현재 객체의 너비/높이
				int sizeWidth = getWidth(); //JDK가 알아서 외부클래스로 인식한다.
				int sizeHeight = getHeight();
				
				if(key==KeyEvent.VK_LEFT) {
					pt.x = pt.x - 10;
					if(pt.x < 0) {
						pt.x = 0;
					}
				}else if(key==KeyEvent.VK_RIGHT) {
					pt.x = pt.x + 10;
					if(pt.x+sizeWidth > screen_w) {
						pt.x = screen_w - sizeWidth;
					}
				}else if(key==KeyEvent.VK_UP) {
					pt.y = pt.y - 10;
					if(pt.y < 0) {
						pt.y = 0;
					}
				}else if(key==KeyEvent.VK_DOWN) {
					pt.y = pt.y + 10;
					if(pt.y+sizeHeight > screen_h) {
						pt.y = screen_h - sizeHeight;
					}
				}
				
				//바뀐 포인트 값으로 윈도우 위치 이동
				setLocation(pt.x,pt.y);
			}
			
		};
		this.addKeyListener(adapter);
	}

	public static void main(String[] args) {
		new MoveExceptMonitor();
	}
}

'Language > Java' 카테고리의 다른 글

[자바_예제] 2차원 배열 _ 달팽이(snail) 배열  (0) 2022.03.28
[자바_예제] 2차원 배열_로또 추첨  (0) 2022.03.28
[자바API_AWT/Swing] 버튼 이벤트 구현하기  (0) 2022.03.28
[자바API_AWT/Swing] 배치관리자와 레이아웃 종류(2)_윈도우창(JFrame) 예제  (0) 2022.03.27
[자바의정석_예제] 객체지향프로그래밍1  (0) 2022.03.27
    'Language/Java' 카테고리의 다른 글
    • [자바_예제] 2차원 배열 _ 달팽이(snail) 배열
    • [자바_예제] 2차원 배열_로또 추첨
    • [자바API_AWT/Swing] 버튼 이벤트 구현하기
    • [자바API_AWT/Swing] 배치관리자와 레이아웃 종류(2)_윈도우창(JFrame) 예제
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바