자바 AWT 이벤트.

이번 시간에는 자바 AWT 이벤트에 대해서 알아봅시다.

이벤트라.. 어떠한 조건이 충족 되거나 어떠한 행위를 했을 때 프로그램에 일어나는 현상이겠죠 -_-?

근데 왜 이게 필요할까요?
그냥 모양 꾸며서 활용하는걸로 보이는 AWT 인데 이런것들을 해야 하는 이유가 처음엔 쪼~금 아리송하기도 하겠죠..

그러나 정말 중요합니다!

기존에 CUI 환경에서는 키보드 입출력을 통해서 조작을 했다면 GUI에서는 마우스로 조작을 하게 됩니다.
마우스는 키보드와 같은 입력장치이지만 마우스가 직접 무엇인가를 하는 것이 아니고 마우스에 움직임 또는 마우스의 클릭 같은 입력 동작으로 인해서 프로그램에 버튼이나 메뉴에 영향을 주게 되지요.

그럼 버튼을 예로 들어봅시다.

버튼을 클릭했다. 그럼 마우스가 값을 넣어주는 것이 아니라 실제로 어떤 일을 수행해야 할 것은 버튼이 해야 할이지요. 그래서 이벤트가 필요한 것입니다.

그럼 이벤트에 속하는 것을 몇가지 예로 들어봅시다.
마우스의 왼쪽/오른쪽 클릭/휠키 동작/드래그/이동
윈도우 창의 크기 변경/종료/최소화/전체화면
버튼의 클릭/활성화/비활성화
채크박스의 선택/해제

기타 등등..

무지 많겠죠. 프로그램에 영향을 주는 행위 자체가 대부분 이벤트라고 보면 됩니다. 그렇기에 이벤트가 필요한 것이지요.

자 그럼 이벤트에 대해서 좀더 알아봅시다.

자바에서 AWT를 이용할 떄는 import java.awt.*;를 써줬어야 했습니다.
이벤트 역시 위와 비슷하게 import java.awt.event.*; 를 써줘야 합니다.

그리고 API에서 java.awt.event에 대해서 확인을 해보면

각종 인터페이스와 클래스가 존재합니다. 그 중에 2가지만 간단히 알아봅시다.

첫번째로 ActionListener 에 대해서 알아봅시다.
API를 참고해 보면 액션이 발생을 하면 이용이 된다고 합니다. 그리고 인터페이스라서 구현을 해줘야 사용이 가능하죠. 이 부분을 잘 기억 해야 합니다. 인터페이스는 구현을 해줘야 하고 인터페이스에는 추상메소드가 존재하므로 추상메소드 또한 구현을 해줘야 한다는 것을 기억해야 합니다.

void actionPerformed (ActionEvent e)  <- ActionListener 인터페이스에 존재하는 추상메소드죠. 저것을 구현해줘야 합니다. 그럼 간단한 예제 소스로 이해를 돕도록 하겠습니다.

class EventTest implements ActionListener{
 public void actionPerformed(ActionEvent e){}
}

위 예제는 매우 간단해 보이지만 완성된 것은 분명합니다. ActionListener 인터페이스를 구현 했으니까요. 생성자를 생략해도 기본생성자가 존재한다는 것은 알고 있겠죠?

Button button = new Button();
button.addActionListener(new SaveEvent());
이렇게 사용을 하면 actionPerformed(ActionEvent e) 메소드가 불러지게 됩니다. 그럼 메소드 내용에 따라 액션이 달라지겠죠? 정말 쉽고 간단합니다.

addActionListener(); 이 메소드를 이용하면 이벤트 인터페이스가 구현된 클래스에서 인터페이스에 존재했던 추상메소드가 실행되는 것이죠(추상메소드는 구현된 클래스에서 구현 됐으므로 구현된 메소드가 실행됩니다.)

여기서 의문을 가질 한가지 요소가 있는데 생성자가 여러개 일 경우나 기본 생성자를 직접 코딩해서 사용하게 된다면 actionPerformed(ActionEvent e) 메소드가 실행되지 않을까 하는 의문일 것이라 봅니다. 그러나 이것은 위에서도 말했듯이 addActionListener(new SaveEvent()); 메소드를 이용하기 때문에 전혀 지장이 없습니다.
오히려 더 득이 되는 일을 할 수 있죠..
오버로딩을 이용하면 많은 생성자를 만들어 사용이 가능하기 때문에 actionPerformed(ActionEvent e) 메소드에 영향을 줄 수도 있죠.
그럼 이벤트에 대한 이야기는 다음의 WindowListener 이야기에서 끝을 내도록 합시다.

두번 째 ~ WindowListener 에 대한 이야기를 합시다. 솔직히 위에서 설명한 것만으로도 이야기는 끝입니다. 그러나 이해를 보충하기 위해 WindowListener 예제를 보고 끝내도록 합시다.

import java.awt.*;

import java.awt.event.*;


public class WinExit extends Frame{


    public WinExit(){

        super("프로그램 종료 이벤트");


        this.setVisible(true);//화면에 보이도록 설정

        this.setSize(400, 550);//창 크기

        this.setLocation(200, 200);//창 배치 위치

        this.setResizable(false);//사이즈 조정 불가능 설정.


        this.addWindowListener(new WinEvent());// 윈도우 이벤트

    }


    public static void main(String[] args) {

        new WinExit();

    }


    // 윈도우 이벤트 클래스

    class WinEvent implements WindowListener{

        public void windowActivated(WindowEvent e){}

        public void windowClosed(WindowEvent e){}

        public void windowClosing(WindowEvent e){

            System.exit(0);// X를 누르면 종료된다.

        }

        public void windowDeactivated(WindowEvent e){}

        public void windowDeiconified(WindowEvent e){}

        public void windowIconified(WindowEvent e){}

        public void windowOpened(WindowEvent e){}

    }

}

### 위 예제는 기존에 코딩 방식과는 조금 다른 방식을 취하고 있습니다. 상속을 통해서 프레임을 만들고 내부 클래스를 이용해서 이벤트를 이용하죠. 뭐 장점이 있으니까 이런식으로 쓰겠죠? 실제로 이렇게 많이 한다고 하네요;
위에 소스를 간단하게 요약하면 창닫기(X버튼)를 누르면 프로그램이 종료 되도록 하는 이벤트를 적용시킨 예제입니다. 참 귀찮게도 WindowListener 인터페이스는 추상메소드가 많아서 구현하는데 좀 귀찮죠; 그리고 내부클래스를 이용한 것은 상하구조를 생각하고 보시면 쉽게 이해가 될 것이라 봅니다. 메인 클래스 내에 존재하는 클래스 이므로 메인 클래스에서는 맘대로 이용이 가능하겠죠? 그럼 예제에 관한 이야기는 이만 하죠~ 질문은 댓글로~

자 이렇게 이벤트에 대해서도 알아봤습니다.
이벤트 부분까지 이해를 하고 나면 자바가 참 재미가 붙을 겁니다. 확실히 우리가 사용하는 인터페이스에 익숙한 프로그램을 만들어 내는 재미란 쏠쏠하기도 하죠.

그럼 다음에 또 만나요 -_-/

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 만성피로 | 2008/09/26 19:22 | 정리할 자료들 | 트랙백 | 덧글(1)

트랙백 주소 : http://maydaisy.egloos.com/tb/877389
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김교수 at 2008/09/27 08:17
역시 이번에도 아주 좋은 강좌네요. 지난 시간에 이벤트처리를 배웠으니 이젠 윈도우종료시 프로그램종료를 할 수 있는 방법을 사용할 수도 있고..^-^

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶