ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA]자바 마우스리스너/어댑터 클래스/키 리스너/키 판별 방법
    Languages/Java 2021. 5. 10. 13:40
    반응형

     

     

     

     

     

     

     

     

     

     

     

     

    마우스리스너

     

     

    마우스로 문자열 이동시키기

     

     

    package project;
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    
    public class MouseListenerEx extends JFrame { 
    	private JLabel la = new JLabel("Hello");
    	public MouseListenerEx() {
    		
    		setTitle("Mouse 이벤트 예제");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		Container c = getContentPane();
    		c.setLayout(null);
    		JLabel la = new JLabel("Hello"); 
    		la.setSize(50, 20);
    		la.setLocation(30, 30);
    		c.add(la);
    		c.addMouseListener( new MouseListener() {
    			public void mousePressed(MouseEvent e) {
    				int x = e.getX();
    				int y = e.getY();
    				la.setLocation(x, y);
    			}
    			public void mouseReleased(MouseEvent e) {}
    			public void mouseClicked(MouseEvent e) {}
    			public void mouseEntered(MouseEvent e) {}
    			public void mouseExited(MouseEvent e) {}
    		});
    		
    		setSize(250, 250);
    		setVisible(true);
    	}
    
    public static void main(String [] args) {
    new MouseListenerEx();
    	}
    } 

     

     

    >>>

     

     

     

     

     

    어댑터(Adapter) 클래스

     

    이벤스 리스너 구현에 따른 부담 해소를 위해

    리스너 작성시 추상 메소드들을 모두 구현해야 하는 부담

    마우스 리스너에서 마우스가 눌러지는 경우(mousePressed())만 처리하고자 하는 경우에도 나머지 4개의

    메소드를 모두 구현해야 하는 부담

     

    리스너의 모든 메소드가 단순 리턴하도록 구현해 놓은 클래스

     

    class MouserListenter implements MouseListener,MouseMotionListener,MouseWheelListener{
    	public void mousePressed(MouserEvent e){}
    	... // 이하생략
    }

     

    추상메소드가 하나뿐인 리스너는 어탭터 클래스 없음

    ActionAdater, ItemAdapter 클래스는 존재하지 않음

     

     

     

     

     

     

    key 이벤트와 포커스

     

    키 입력 시, 다음 세 경우에 key 이벤트 발생

    키를 누르는 순간

    누른 키를 떼는 순간

    누른 키를 떼는 순간(unicode 키의 경우에만)

     

    키 이벤트를 받을 수 있는 조건

    모든 컴포넌트 가능하지만, 현재 포커스를 가진 컴포넌트

     

    포커스(focus)

    컴포넌트나 응용프로그램이 키 이벤트를 독점하는 권한

    컴포넌트에 포커스 설정 방법 : 다음 2라인의 코드 필요

     

    component.setFocusable(true); //component가 포커스를 받을 수 있도록 설정
    component.requestFocus(); // componen 포커스 강제 지정

    **자바 플랫폼마다 실행 환경의 초기화가 서로 다를 수 있기 때문에 다음 코드가 필요함

     

     

    컴포넌트에 포커스 주기

     

    스윙 프레임이 만들어질 포커스를 주고자 하는 경우

     

    setVisible(true); // 스윙 프레임 출력
    component.setFocusable(true);
    component.requestFocus();

     

    마우스로 컴포넌트를 클릭할 때 포커스 지정하는 방법

    언제든지 필요할 때 포커스 줄 수 있음

     

    component.addMouseListener(new MouseAdater(){
    	public void mouseClicked(MouseEvent e){
        Component c = (Component)e.getSource(); // 클릭된 컴포넌트
        c.setFocusable(true);
        c.requestFocus();
        }
    });

     

     

    keyListener의 메소드와 키

     

    keyListener의 3개 메소드

     

    void keyPressed(keyEvent e){

     //이벤트 처리 루틴

    }

     

    void keyReleased(keyEvent e){

     //이벤트 처리 루틴

    }

     

    void keyTyped(keyEvent e){

     //이벤트 처리 루틴

    }

     

    컴포넌트에 키 이벤트 리스너 등록

     

    component.addkeyListener(mykeyLisener);

     

     

    키의 2가지 종류

     

    유니코드 키

     

    유니코드란 전 세계의 문자에 대한 코드 체계

     

    유니코드가 아닌 키

     

    문자 키가 아닌 제어 키

    키마다 키 코드값(가상 키 코드 값)이 정의되어 있음

     

     

     

    가상 키

     

    유니코드 키든 아니든 모든 키에 자바의 가상 키 코드가 정의되어 있다

    가상 키코드는 keyEvent 클래스에 상수로 선언

     

     

     

     

     

    입력된 키 판별

     

    키가 입력되면 키 정보를 가진 이벤트 객체 생성 : keyEvent 객체

    keyEvent객체가 리스너에 전달됨

     

    1. 키의 문자코드(유니코드) 알아내기 char KeyEvent.getKeyChar()

    눌러진 키에 해당하느는 문자 코드(유니코드) 리턴

    눌러진 키가 문자 키인 경우에만 작동

     

    2. 입력된 키의 가상 키 값 알아내기 int keyEvent.getKeyCode()

    모든 키에 대해 작동

    입력된 키를 판별하기 위해 가상키 값과 비교

     

    3. 키 이름 문자열 리턴 String KeyEvent.getKeyText(int keyCode)

    Static 메소드

    매개변수 keyCode의 코드 값(가상 키)에 해당하는 키의 이름 문자열 리턴

     

     

     

    예제) 다양한 KeyEvent와 KeyListener 활용

     

     

     

    package project;
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    
    public class KeyListenerEx extends JFrame {
    	private JLabel [] keyMessage; 
    	public KeyListenerEx() {
    		setTitle("keyListener 예제");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		Container c = getContentPane();
    		c.setLayout(new FlowLayout());1
    		c.addKeyListener(new MyKeyListener());
    		keyMessage = new JLabel [3]; 
    		keyMessage[0] = new JLabel(" getKeyCode() ");
    		keyMessage[1] = new JLabel(" getKeyChar() ");
    		keyMessage[2] = new JLabel(" getKeyText() ");
    		for(int i=0; i<keyMessage.length; i++) {
    			c.add(keyMessage[i]);
    			keyMessage[i].setOpaque(true);
    			keyMessage[i].setBackground(Color.YELLOW);
    		}
    
    		setSize(300,150);
    		setVisible(true);
    		c.setFocusable(true);
    		c.requestFocus();
    		}
    	
    		class MyKeyListener extends KeyAdapter {
    		public void keyPressed(KeyEvent e) {
    		int keyCode = e.getKeyCode();
    		char keyChar = e.getKeyChar();
    		keyMessage[0].setText(Integer.toString(keyCode));
    		keyMessage[1].setText(Character.toString(keyChar));
    		keyMessage[2].setText(e.getKeyText(keyCode));
    			}
    		}
    		
    	public static void main(String [] args) {
    		new KeyListenerEx();
    		}
    }

     

     

    실행결과)

    유니코드 w를 입력하였을때

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    반응형

    댓글

Designed by Tistory.