본문 바로가기
Java

[Java Swing] 이벤트 리스너 (Event Listener)

by 스응 2023. 2. 17.
728x90
728x90

이벤트 리스너 (Event Listener, 이벤트 핸들러)

  - 이벤트의 발생을 감지하고, 이벤트에 대한 처리를 담당하는 객체

  - 실행의 흐름을 만들 수 있음

  - implements 키워드로 인터페이스를 받지 않고, 구현 클래스를 이용할 수도 있음

      · 구현 클래스 관련 설명 : https://young0105.tistory.com/82

 

 


ActionListener 인터페이스

  - 버튼을 눌렀을 때 이벤트가 발생함

 

  - 해당 클래스는 'ActionListener' 인터페이스가 적용됨

      → 다형성 : 자기 자신의 자료형으로 사용할 수도 있고, ActionListener 타입으로 사용할 수도 있음

  - 인터페이스를 불러오면 'actionPerformed' 메서드가 자동으로 호출됨

     → 해당 메서드를 재정의해서, 이벤트 발생 시 실행 코드를 작성할 수 있음

 

public class 클래스명 extends JFrame implements ActionListener {

    // 멤버변수
    private JButton button;

    // 생성자
    public 클래스명() {
        initData();
        setInitLayout();
        addEventListener();
    }

    // 생성자에 사용할 메서드 1
    private void initData() {
        // 창 제목, 크기 등 설정
        ...

        // 버튼 인스턴스화
        버튼명 = new JButton("텍스트");
    }

    // 생성자에 사용할 메서드 2
    private void setInitLayout() {
        // 레이아웃 관련 설정
        ...

        // 컴포넌트 추가
        add(버튼명);

        setVisible(true);
    }

    // 생성자에 사용할 메서드 3
    private void addEventListener() {
        // 이벤트 리스너 등록 (이벤트 발생의 기준)
        버튼명.addActionListener(this);
    }

    // 인터페이스 설정 시, actionPerformed 메서드가 호출됨
    @Override
    public void actionPerformed(ActionEvent e) {
        // 이벤트 발생 시 실행 코드
        ...
    }

    public static void main(String[] args) {
        // 익명 클래스로 호출
        new ColorChangeFrame();
    } // end of main
    
} // end of class

 

  - 예제 : https://young0105.tistory.com/86

#  actionPerformed 메서드

  - e.getSource() 메서드로 e의 타입을 확인해보면 'Object' 타입이라고 확인됨

      → 코드를 설계할 때 더 편리하게 사용하기 위해 기존의 타입으로 다운 캐스팅할 수 있음

 

    @Override
    public void actionPerformed(ActionEvent e) {
        // 다운 캐스팅
        JButton 변수 = (JButton) e.getSource();
    }

 

 

반응형
728x90

KeyListener 인터페이스

  - 키보드 자판을 누르거나 뗐을 때 이벤트가 발생함

 

  - 사용될 만한 컴포넌트

      · JTextArea

      · JTextField

 

public class 클래스명 extends JFrame implements KeyListener {

    // 멤버변수
    ...

    // 생성자
    public 클래스명() {
        initData();
        setInitLayout();
        addEventListener();
    }

    // 생성자에 사용할 메서드 1
    private void initData() {
        // 창 제목, 크기 등 설정
        ...

        // 컴포넌트 인스턴스화
        컴포넌트명 = new 컴포넌트();
    }

    // 생성자에 사용할 메서드 2
    private void setInitLayout() {
        // 레이아웃 관련 설정
        ...

        // 컴포넌트 추가
        add(컴포넌트명);

        setVisible(true);
    }

    // 생성자에 사용할 메서드 3
    private void addEventListener() {
        // 이벤트 리스너 등록 (이벤트 발생의 기준)
        컴포넌트명.addActionListener(this);
    }

	// 문자 키를 눌렀을 때 반응함
	@Override
	public void keyTyped(KeyEvent e) {
		
	}

	// 키보드를 눌렀을 때 반응함
	@Override
	public void keyPressed(KeyEvent e) {

	}

	// 누르고 있던 키를 뗐을 때 반응함
	@Override
	public void keyReleased(KeyEvent e) {
		
	}
    
} // end of class

 

  - 예제 : https://young0105.tistory.com/88

#  KeyCode (int 타입)

  - 키보드의 자판은 각각 자신의 KeyCode를 가짐

      → e.getKeyCode() 메서드를 통해 가져올 수 있음

  - 방향 키의 KeyCode가 Java 내에 상수로 정의되어 있음

위쪽 (↑) 아래쪽 (↓) 왼쪽 (←) 오른쪽 (→)
KeyEvent.VK_UP KeyEvent.VK_DOWN KeyEvent.VK_LEFT KeyEvent.VK_RIGHT

#  사용하지 않을 메서드도 재정의해야 하는 것이 싫은 경우

  - KeyAdaptor 클래스를 구현 클래스로 사용하면, 원하는 keyEvent만 가져와서 재정의 가능

 

 


MouseListener 인터페이스

  - 마우스로 클릭하거나 뗐을 때, 마우스 커서가 올라갔거나 벗어났을 때 이벤트가 발생함

 

// implements 대신 구현 클래스 사용
public class 클래스명 extends JFrame {
	
    // 멤버변수
	...
	
    // 생성자
	public MouseEventListener1() {
		initData();
		setInitLayout();
		addEventListener();
	}
	
	private void initData() {
        // 창 제목, 크기 등 설정
        ...

        // 컴포넌트 인스턴스화
        ...
	}
	
	private void setInitLayout() {
        // 레이아웃 관련 설정
        ...

        // 컴포넌트 추가
        ...

        setVisible(true);
	}
	
	private void addEventListener() {
    	// 대상에 this를 넣으면 창 전체에 대해 이벤트를 감지함
		대상.addMouseListener(new MouseListener() {
			
			// 마우스를 클릭하다가 뗐을 때
			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
			// 마우스를 클릭하고 있을 때
			@Override
			public void mousePressed(MouseEvent e) {
				
			}
			
			// 마우스 커서가 벗어났을 때
			@Override
			public void mouseExited(MouseEvent e) {
            
			}
			
			// 마우스 커서가 올라갔을 때
			@Override
			public void mouseEntered(MouseEvent e) {
            
			}
			
			// 마우스로 클릭했을 때
			@Override
			public void mouseClicked(MouseEvent e) { 
            
			}
		});
	}
		
}

 

  - 예제 : https://young0105.tistory.com/87

#  x 좌표, y 좌표 가져오기

// x 좌표
e.getX();

// y 좌표
e.getY();

// x 좌표, y 좌표를 가져와서 컴포넌트의 위치 설정 가능
컴포넌트명.setLocation(e.getX(), e.getY());

 

320x100
반응형

댓글