이벤트 처리 순서
이벤트 용어정리
이벤트 소스 알아내기EventObject.getSource() : 어떤 컴포넌트에서 이벤트가 발생했는지 그에 해당하는 참조자를 리턴해줌
이벤트 종류이벤트 객체종류
이벤트 리스너
ex. 버튼을 클릭했을 때 그 버튼한테 등록된 MouseEvent 이벤트 리스너를 찾아서, 그 리스너 안쪽에다 화면에 변경되는 내용을 작성하면 된다.
ex. ActionListener 인터페이스
ex. MouseListener 인터페이스
리스너 인터페이스 종류및 추상메소드
컴포넌트에 리스너 등록하기
형태1 : (컴포넌트).add(리스너 이름)(); ex1.
ex2.
이벤트 리스너 작성 방법그렇다면 인터페이스를 구현하는 이벤트 리스너를 클래스로 작성할때 어떻게 만들 수 있는지 더 자세히 알아보자. 1. 독립 클래스로 작성
2. 내부 클래스(안쪽 클래스)로 작성
3. 익명 클래스로 작성예제1 - 독립 클래스아래와 같이 Action 이벤트(버튼을 클릭하는 액션)에 대한 처리를해줄수 있는 ActionListener 인터페이스를 재정의한다. 재정의할 메소드가 actionPerformed() 1개이다. 이벤트 객체 e 는 방금 버튼을 클릭한 것에 대한 이벤트 정보를 모두 가지고 있다!
그리고 아래처럼 버튼(컴포넌트) 에 앞서 정의한 리스너인 ActionListener 를
등록해준다. 전체코드 실행결과
예제2 - 내부 클래스(안쪽 클래스) 로 이벤트 리스너 만들기잠깐, 복습!) 안쪽 클래스에서 "바깥클래스.this.메소드()" 형식을 호출하면 이는 바깥클래스의 메소드가 호출되는 것이였다. 익명 클래스
형태 : ex. 원래는 아래처럼 리스너 클래스를 만들고 addActionListener() 메소드로 리스너를 등록해줬었다.
반면 아래와 같이 익명 클래스로 익명 객체 만들고 바로 등록가능하다.
예제리스너 객체를 익명 객체로 만들고, 그 익명객체를 addActionListener() 를 통해 해당 버튼에 바로 등록해줌 MouseListener 리스너마우스로 문자열 이동시키기
위와 같이 이벤트가 발생한 x, y좌표를 getX() 와 getY() 로 얻어온다. 그리고 "hello" 라고 문자열이 적혀있던 레이블 객체 la 를 (x,y) 좌표로 이동시키기 위해 setLocation() 속성을 활용한다! 그리고 이벤트가 발생하는 컴포넌트가 컨텐트팬(ContentPane) 이기 떄문에 어댑터(Adapter) 클래스
=> "어댑터 클래스를 상속" 받는 것이므로, implements 가 아니라 extends 키워드를 사용하자!
ex. MouseAdapter 어댑터 클래스 정의내용 주의 : 추상 메소드가 하나뿐인 리스너는 어댑터 클래스가 없다!!!!=> ActionAdapter 라는 클래스는 존재하는 존재하지 않는다. 예제1왼쪽은 앞서 배웠던 인터페이스 구현방법이고, 오른쪽은 지금 배우는 어댑터 클래스이다. 보듯이 어댑터는 필요한 부분만 재정의하면 된다. 예제2 |