AWT 이벤트처리하기 1. 이벤트처리방식 2. 이벤트클래스와리스너 3. 이벤트어댑터 4. 이벤트의종류 이벤트 (Event) 이벤트 사용자가 UI 컴포넌트에대해취하는행위로인한사건이벤트기반프로그래밍 무한루프를돌면서사용자의행위로인한이벤트를청취하여응답하는형태로작동하는프로그래밍
java.awt.event 이벤트처리 AWT 컴포넌트에서발생하는다양한이벤트를처리하기위한인터페이스와클래스제공 xxxlistener, xxxevent, xxxadapter, 위임형이벤트처리모델 컴포넌트 ( 이벤트소스 ) 에특정이벤트를처리하기위한객체 ( 이벤트리스너 ) 를따로등록함 이벤트클래스와이벤트리스너 컴포넌트에서발생할수있는이벤트들을분류한이벤트클래스들이존재 이벤트클래스는종류에맞는정보와메소드를가짐 컴포넌트마다발생될수있는이벤트가정해짐 Button 의경우발생가능한이벤트 : ActionEvent, ComponentEvent, FocusEvent, KeyEvent, MouseEvent ActionEvent 가발생할수있는컴포넌트 : Button, List, MenuItem, TextField
이벤트클래스와이벤트리스너 리스너는이벤트처리를위한인터페이스 xxxevent 클래스는 xxxlistener 인터페이스와대응됨 xxxlistener에는저수준이벤트를처리하기위한메소드들이존재 예 - KeyEvent 처리를위한 KeyListener : void keypressed(keyevent e) : void keyreleased(keyevent e) : void keytyped(keyevent e) 이벤트처리과정 처리할이벤트를결정 ActionEvent 라하자 해당리스너를구현하는클래스를정의 ActionListener 를구현하는클래스를 MyListener 라하자 : void actionperformed(actionevent e) 라는메소드를구현해야함 객체를생성하여해당컴포넌트의이벤트리스너로등록함 this.addactionlistener(new MyListener());
이벤트처리예제 import java.awt.*; import java.awt.event.*; // 이벤트리스너구현 class MyListner implements WindowsListener { public void windowclosing(windowevent ev) { System.exit(0); public void windowactivated(windowevent ev) { public void windowclosed(windowevent ev) { public void windowdeactivated(windowevent ev) { public void windowdeiconified(windowevent ev) { public void windowiconified(windowevent ev) { public void windowopened(windowevent ev) { 이벤트클래스계층구조 Object EventObject AWTEvent ComponentEvent ActionEvent AdjustmentEvent ItemEvent TextEvent ContainerEvent FocusEvent InputEvent KeyEvent MouseEvent PaintEvent WindowEvent
이벤트어댑터 저수준이벤트의편리한처리 이벤트처리메소드가 2 개이상인리스너인터페이스 (xxxlistener) 들에대해그것을구현한어탭터클래스 (xxxadapter) 가존재함 각이벤트처리메소드는빈블록임 어댑터가있는경우, 리스너를구현하는대신어댑터를상속하는클래스를정의 이벤트처리예제 import java.awt.*; import java.awt.event.*; // 어댑터를상속 class MyListner extends WindowAdapter { public void windowclosing(windowevent ev) { System.exit(0);
ActionEvent 와 ActionListener ActionListener 의메소드 void actionperformed(actionevent ev) 버튼을클릭하는경우, 메뉴항목을클릭하는경우, TextField 에서 엔터키 를치는경우, 리스트의항목을더블클릭하는경우 ActionEvent 의메소드 String getactioncommand() : 명령의이름을리턴 Object getsource() : EventObject 에서상속된메소드 ActionEvent 예제 class MyListener implements ActionListener { public void actionperformed(actionevent ev) { System.out.println(((Button)ev.getSource()).getLabel()); System.out.println(ev.getActionCommand()); if ("OK".equals(ev.getActionCommand())) { System.out.println("OK 버튼이눌렸습니다."); else if ("Cancel".equals(ev.getActionCommand())) { System.out.println("Cancel 버튼이눌렸습니다.");
WindowEvent 와 WindowListener WindowListener 의메소드 윈도우의상태변화를야기하는경우 void windowactivated(windowevent ev) void windowclosed(windowevent ev) WindowEvent 의메소드 int getnewstate() : 0 이면보통상태임 int getoldstate() Window getwindow() ItemEvent 와 ItemListener ItemListener 의메소드 void itemstatechanged(itemevent ev) Checkbox, CheckboxMenuItem, Choice, List에서아이템을선택하거나해제하는경우 ItemEvent 의메소드 Object getitem() int getstatechange()
AdjustmentEvent 와리스너 AdjustmentListener 의메소드 void adjustmentvaluechanged (AdjustmentEvent ev) 스크롤바의상태변화가생길때 AdjustmentEvent 의메소드 int getvalue() int getadjustmenttype() : UNIT_INCREMENT, UNIT_DECREMENT, BLOCK_INCREMENT, BLOCK_DECREMENT, TRACK class MyEvent implements AdjustmentListener { Label rl, gl, bl; Canvas c; Scrollbar rb, gb, bb; public MyEvent(ScrollbarEvent f) { rl = f.rl; gl = f.gl; bl = f.bl; c = f.c; rb = f.rb; gb = f.gb; bb = f.bb; public void adjustmentvaluechanged(adjustmentevent ev) { int r, g, b; r = rb.getvalue(); g = gb.getvalue(); b = bb.getvalue(); Color newbg = new Color(r, g, b); rl.settext(" 적 " + r); gl.settext(" 녹 " + g); bl.settext(" 청 " + b); c.setbackground(newbg);
KeyEvent 와 KeyListener KeyListener 의메소드 keypressed(keyevent ev) keyreleased(keyevent ev) keytyped(keyevent ev) KeyEvent 의메소드 char getkeychar() int getkeycode() int getkeylocation() static String getkeytext(int keycode) static String getkeymodifierstext(int) MouseEvent 와리스너 MouseListener 의메소드 mouseclicked(mouseevent ev) MouseMotionListener 의메소드 mousedragged(mouseevent ev) mousemoved(mouseevent ev) MouseEvent 의메소드 int getbutton() int getcickcount() Point getpoint()
TextEvent 와 FocusEvent TextListener 의메소드 textvaluechanged(textevent ev) TextArea와 TextFiled에서텍스트에변화가생겼을때 FocusListener 의메소드 컴포넌트가입력포거스를얻거나잃을때 focusgained(focusevent ev) focuslost(focusevent ev) ComponentEvent 와 ContainerEvent ComponentListener 의메소드 componenthidden(componentevent ev) componentmoved(componentevent ev) componentresized(componentevent ev) componentshown(componentevent ev) ContainerListener 의메소드 자식컴포넌트가추가되거나삭제될때 componentadded(containerevent ev) componentremoved(containerevent ev)