이벤트 () 란? - 사용자가입력장치 ( 키보드, 마우스등 ) 등을이용해서발생하는사건 - 이벤트를처리하는프로그램은이벤트가발생할때까지무한루프를돌면서대기상태에있는다. 이벤트가발생하면발생한이벤트의종류에따라특정한작업을수행한다. - 이벤트관련프로그램작성을위해 java.awt.event.* 패키지가필요 - 버튼을누른경우, 1 버튼클릭이벤트발생 2 발생한이벤트인식 ( 이벤트리스너가수행 ) 3 발생한이벤트에따라원하는작업수행
이벤트의발생과처리 사용자 AWT 컴포넌트사용 이벤트발생 키보드이벤트리스너마우스이벤트리스너기타이벤트리스너
컴포넌트와이벤트 Component Action Adjustment Component Container Focus Item Key Mouse Mousemotion Text Window Button Canvas Checkbox CheckboxMenuItem Choice Component Container Dialog Frame Label List MenuItem Panel Scrollbar ScrollPane TextArea TextField Window
이벤트의종류 이벤트 Action Adjustment Component Container Focus Item Key Mouse MouseMotion Text Window 설명 버튼클릭, 리스트항목의더블클릭, 메뉴항목의선택, 텍스트필드에서 Enter 를눌렀을때발생 사용자가스크롤바를움직였을때발생 컴포넌트가사라지거나나타날때, 컴포넌트의이동및크기조절시에발생 컨터이너에컴포넌트가추가및제거되었을때발생 컴포넌트가초점 (Focus) 을얻거나잃었을때발생 체크박스, 선택버튼, 리스트의한항목이선택되었을때, 메뉴의항목이선택되거나해지될때발생 키보드로부터입력이발생할때 마우스버튼을클릭할때, 누를때, 놓을때, 컴포넌트영역에들어갈때및나올때발생 마우스드래그와이동시에발생 TextArea 나 TextField 에서값이입력될때발생 윈도우와활성화 (Activate), 비활성화, 아이콘화, 아이콘에서복구될때, 윈도우의오픈및종료시발생
이벤트처리과정 컴포넌트생성 이벤트등록 이벤트리스너작성 이벤트처리
이벤트처리방법 (1/3) - 컴포넌트객체에서이벤트가발생 ( 컴포넌트는이벤트소스가된다.) - 이벤트리스너가발생한이벤트를처리하도록한다. 이벤트의종류에따라컴포넌트에등록해야하는리스너가있다. 이러한리스너는 이벤트이름 + Listener 의형태로존재한다. (ActionListener, MouseListener, MouseMotionListener ) 리스너는이벤트와관련된인터페이스를상속받아구현한다. ( 인터페이스에존재하는모든메서드를재정의해야한다.
이벤트처리방법 (2/3) 1 java.awt.* 와 java.awt.event.* 패키지를 import 한다. import java.awt.*; import java.awt.event.*; 2 리스너인터페이스를상속받아서이벤트리스너를구현한다. class 클래스이름 extends Frame implements ActionListener { public void actionperformed(action e) {
이벤트처리방법 (3/3) 3 AWT 컴포넌트를생성한다. Button btn = new Button( 버튼 ); 4 컴포넌트의종류에따라해당리스너의객체를등록한다. btn.addactionlistener(this);
자바의이벤트인터페이스 리스너인터페이스어댑터클래스메서드 ActionListener AdjustmentListener actionperformed(action) adjustmentvaluechanged(adjustment) ComponentListener ComponentAdapter componenthidden(component), componentmoved(component), componentresized(component), componentshown(component) ContainerListener ContainerAdapter componentadded(container), componentremoved(container) FocusListener FocusAdapter focusgained(focus), focuslost(focus) ItemListener itemstatechanged(item) KeyListener KeyAdapter keypressed(key), keyreleased(key), keytyped(key) MouseListener MouseAdapter mouseclicked(mouse), mouseentered(mouse), mouseexited(mouse), mousepressed(mouse), mousereleased(mouse) MouseMotionListener MouseMotionAdapter mousedragged(mouse), mousemoved(mouse) TextListener textvaluechanged(text) WindowListener WindowAdapter windowactivated(window), windowclose(window), windowclosing(window), windowdeactivated(window), windowdeiconified(window), windowiconified(window), windowopened(window)
자바의이벤트메서드호출시기 (1/3) 메서드 호출시기 ActionPerformed(Action ae) 버튼을클릭했을때, Menu 를클릭했을때, TextField 에서 Enter 키를눌렀을때, List 의 item 하나를더블클릭했을때 componentmoved(action ae) 컴포넌트가이동되었을때 componenthidden(action ae) componentresized(action ae) componentshown(action ae) mousedragged(mouse me) mousemoved(mouse me) mousepressed(mouse me) mousereleased(mouse me) mouseentered(mouse me) mouseexited(mouse me) mouseclicked(mouse me) mousewheelmoved(mousewheel e) 컴포넌트가화면에보이지않게되었을때컴포넌트크기가변경되었을때컴포넌트가화면에보여질때마우스버튼을누른채로마우스를움직였을때마우스포인터를이동시킬때마우스버튼을눌렀을때마우스버튼을떼었을때마우스포인터가이벤트소스의영역안으로들어왔을때마우스포인터가이벤트소스의영역안에서밖으로이동할때마우스버튼을눌렀다가떼었을때마우스의휠을움직였을때
자바의이벤트메서드호출시기 (2/3) 메서드 호출시기 keypressed(key ke) keyreleased(key ke) keytyped(key ke) textvaluechanged(text te) focusgained(focus fe) focuslost(focus fe) itemstatechanged(item ie) adjustmentvaluechanged(adjustmenteven t ae) windowopened(window we) 키보드의키를눌렀을때 키보드의키를떼었을때 키보드의키를눌렀다떼었을때 TextField 또는 TextArea 의내용이변경되었을때 이벤트소스로 focus 가이동했을때 이벤트소스가갖고있던 focus 가다른컴포넌트로이동했을때 Checkbox, CheckboxItem, List, choice 의 status 가변경되었을때 (selected <-> unselected) Scrollbar 의값이변경되었을때 윈도우가열렸을때 windowclosing(window we) 윈도우가닫힐때 ( 닫기버튼을눌렀을때 ) windowclosed(window we) 윈도우가닫혔을때 (dispose() 가호출되었을떄 ) windowiconified(window we) windowdeiconified(window we) 윈도우가최소화 ( 아이콘화 ) 되었을때 윈도우가최소화상태에서다시원래크기로되었을때
자바의이벤트메서드호출시기 (3/3) 메서드 호출시기 windowactivated(window we) windowdeactivated(window we) windowgainedfocus(window we) windowlostfocus(window we) windowstatechanged(window we) componentadded(container ce) componentremoved(container ce) 윈도우가활성화되었을때윈도우가비활성화되었을때윈도우가포커스를얻을때윈도우가포커스를잃었을때윈도우의상태가변했을때컨테이너에컴포넌트가추가되었을때컨테이너에컴포넌트가제거되었을때
어댑터클래스 (Adapter Class) (1/2) - 이벤트를처리하는메서드를구현할때, 처리에필요한메서드만구현하면오류가발생한다. 왜냐하면, 이벤트리스너는인터페이스이기때문이다. - 인터페이스를구현하려면인터페이스에정의된모든메스드를구현해야하기때문이다. - 이벤트처리에필요한메서드만구현하고자할경우에사용하는클래스가어댑터클래스이다.
어댑터클래스 (Adapter Class) (2/2) - 어댑터클래스와인터페이스의실제구현예 interface KeyListener { public void keypressed(key e); public void keyreleased(key e); public void keytyped(key e); class KeyAdapter implements KeyListener { public void keypressed(key e) { public void keyreleased(key e) { public void keytyped(key e) {
어댑터클래스 (Adapter Class) 의사용법 class KeyHandler implements KeyListener { public void keypressed(key e) { System.out.println(e.getKeyChar()); public void keyreleased(key e) { public void keytyped(key e) { class KeyHandler extends KeyAdapter { public void keypressed(key e) { System.out.println(e.getKeyChar());
자바의리스너종류와연결및해제방법 리스너인터페이스리스너를컴포넌트에연결및해제할때사용하는메서드이벤트소스 ActionListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Button, List, MenuItem, TextField AdjustmentListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Scrollbar ComponentListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Component ContainerListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Container FocusListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Component ItemListener 리스너이름앞에 add추가. 리스너이름앞에 remove 추가 Checkbox, CheckboxMenuItem, List, Choice KeyListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Component MouseListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Component MouseMotionListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Component TextListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 TextField, TextArea WindowListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Window WindowFocusListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Window WindowStateListener 리스너이름앞에 add 추가. 리스너이름앞에 remove 추가 Window
리스너인터페이스와어댑터의사용예 import java.awt.frame; import java.awt.event.*; public class FrameTest { public static void main(string[] args) { Frame f = new Frame("Login"); f.addwindowlistener(new Handle()); f.setsize(300, 200); f.setvisible(true); class Handle extends WindowAdapter { public void windowclosing(window we) { we.getwindow().setvisible(false); we.getwindow().dispose(); System.exit(0); import java.awt.frame; import java.awt.event.*; public class FrameTest { public static void main(string[] args) { Frame f = new Frame("Login"); f.addwindowlistener(new Handle()); f.setsize(300, 200); f.setvisible(true); class Handle implements WindowListener { public void windowclosing(window we) { we.getwindow().setvisible(false); we.getwindow().dispose(); System.exit(0); public void windowclosed(window e){ public void windowiconified(window e){ public void windowdeiconified(window e){ public void windowactivated(window e){ public void windowdeactivated(window e){ public void windowopened(window e){