Object-Oriented Programming wiht Java Burapha University, 2001 Graphical User Interface in Java Java AWT Events Event Delegation Model AWT Event Handling.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
E-COMMERCE WEBSITE Smartzap Co., Ltd.. Company Profile บริษัท สมาร์ทแซป จำกัด ก่อตั้งเมื่อปี 2543 (13 ปี ) ในช่วงยุค Internet เพิ่ง เริ่มต้น เป็นบริษัทที่ดำเนินงานทางด้าน.
Advertisements

Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Component องค์ประกอบของ GUI.
Swing Component Basic Component.
Introduction to Java Graphic 2D
Graphical User Interface charturong.ee.engr.tu.ac.th/CN208
การประมวลผลภาพแบบดิจิตอล Ian Thomas ภาควิชาฟิสิกส์ คณะวิทยาศาสตร์ มหาวิทยาลัยขอนแก่น The structure of a Delphi program.
VARIABLES, EXPRESSION and STATEMENTS. Values and Data Types Value เป็นสิ่งพื้นฐาน มีลักษณะเป็น ตัวอักษร หรือ ตัวเลข อาทิ 2+2 หรือ “Hello world” Value.
Location object Form object
Lecturer: Kanjana Thongsanit
ครั้งที่ 7 Composition.
LOGO Array. ประเภทของ Array - อาเรย์ 1 มิติ (One) - อาเรย์ 2 มิติ (Two) - อาเรย์ 3 มิติ (Three) 2.
WEEK#16: Method เมธอดคือกลุ่มคําสั่งที่ถูกกําหนดขึ้นเพื่อทำงาน อย่างใดอย่างหนึ่งเพื่อให้ได้ผลลัพธ์ตาม ต้องการ การประกาศเมธอด มีรูปแบบดังนี้ [modifier]
บทที่ 3 Class and Object (1) การสร้างและการใช้งานคลาส
คลาสและวัตถุ (2) (Class & Object)
คลาสและวัตถุ (3) (Class & Object)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
คลาสและวัตถุ (2) (Class & Object)
1 String bookList[] = {" Doraemon ", " A-Ra-Re ", " DragonBall ", " BirdLand ", " Pung-Pong "}; JList scrollingList = new JList(bookList); scrollingList.setVisibleRowCount(4);
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
ทบทวนเรื่อง GUI - กลุ่มคำสั่ง AWT Set (Abstract Windowing Toolkit) และ
บทที่ 4 Method (1).
ความหมายของ GUI Graphic User Interface (GUI) คือ ส่วนของการติดต่อกับผู้ใช้ด้วยรูปภาพ ที่มีสร้างขึ้นโดยใช้โปรแกรม อยู่ในชุดแพคเกจ java.awt และ javax.swing.
Dynamic Link Library (DLL)
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Algorithm มหาวิทยาลัยเนชั่น Java Pre-Test 49 (Series 1, 2 )
Page: 1 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้ ผศ. บุรินทร์ รุจจน พันธุ์.. ปรับปรุง 19 ตุลาคม 2555 Introduction to Batch.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 7 มิถุนายน 2556 Text File Processing มหาวิทยาลัยเนชั่น.
JAVA PROGRAMMING PART IV.
การติดต่อกับฐานข้อมูล(MySQL)
ครั้งที่ 3.
คำสั่งควบคุมการ ทำงาน การเขียนโปรแกรมโดยปกติ มีทั้งให้ทำงาน เป็นลำดับ ที่ละคำสั่ง บางครั้งมีการให้เปลี่ยน ลำดับในการทำคำสั่ง เพื่อให้การเขียน โปรแกรมมีประสิทธิภาพสูงสุด.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved JTextArea Constructors 
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Swing GUI Components.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Java Programming Language สาขาวิชาระบบสารสนเทศ คณะบริหารธุรกิจ มหาวิทยาลัยเทคโนโลยีราชมงคลกรุงเทพ.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Thread
Thread Thread ส่วนของ process ที่ให้ CPU ประมวลผล.
The ServerSocket Class ใช้ในการจัดทำเครื่องที่เป็นการบริการ ใช้ในการจัดทำเครื่องที่เป็นการบริการ โดยจะมี ช่วงชีวิตดังนี้ โดยจะมี ช่วงชีวิตดังนี้
การค้นหาข้อมูลในฐานข้อมูล VB.NET & ADO.NET
วิชาวิเคราะห์และออกแบบระบบเชิงวัตถุ Lec10 :: Behavioral Modeling with UML Behavioral Diagrams Interaction Diagrams State Diagrams Activity Diagram Last.
Java Desktop Application #4
Java Array And String โดย อ. นัฐพงศ์ ส่งเนียม
การเขียนโปรแกรม JAVA ขั้นพื้นฐาน
Java Desktop Application #5
Nattapong Songneam BankAccount – Example Nattapong Songneam
เรื่อง jOptionPane Nattapong Songneam
การสร้าง WebPage ด้วย Java Script Wachirawut Thamviset.
21 August ดรุณี ศมาวรรตกุล 1 2. ADT List - Unsorted list ADT - list implementation - Sorted List - Circular list - Doubly linked list.
Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai
Java Array and String Jarungjit Parnjai
Object-Oriented Programming with Java Burapha University, 2001 Java Array and String Week #3 Jarungjit Parnjai.
Object-Oriented Programming with Java Burapha University, 2001 Java Exceptions Week #9 Jarungjit Parnjai.
Burapha University, 2001 Object-Oriented Analysis and Design Design Patterns Iterator Week #11 Jarungjit Parnjai.
Lecture 7 Java Exceptions. Errors  Compile-time Errors  เกิดขึ้นระหว่าง compile ตรวจสอบได้ด้วย Compiler  เช่น ผิดหลักไวยากรณ์  Run-time Error  เกิดขึ้นระหว่างประมวลผล.
Lecture 3 ฟอร์ม, คอนโทรล. Initial Visual Basic Screen.
Java collection framework
Java Programming Java Structure and Datatype,Variable
 Mr.Nitirat Tanthavech.  HTML forms are used to pass data to a server.  A form can contain input elements like text fields, checkboxes, radio-buttons,
การจัดวางคอมโพเนนต์กราฟิก
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
ให้ทำการเขียนโปรแกรมเพื่อแสดงรูปภาพ ดังนี้
เครื่องมือที่ใช้ JUnit4.8.1 on Eclipse SDK3.5.2 ขึ้นไป
Powerpoint Templates Page 1 Powerpoint Templates Selection Structure โครงสร้างการทำงานแบบทางเลือก.
การเขียนโปรแกรมบนมาตรฐานเปิด โครงสร้างโปรแกรม public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World”);
Inheritance Chapter 07.
ใบสำเนางานนำเสนอ:

Object-Oriented Programming wiht Java Burapha University, 2001 Graphical User Interface in Java Java AWT Events Event Delegation Model AWT Event Handling Week #10 Jarungjit Parnjai

Object-Oriented Programming wiht Java Burapha University, 2001 Lecture Outline q Event q Event Source, Event Object, Event Listener q Delegation Event Model q Java AWT Event q AWT Event Handling q Interface & Event Listeners q Example of a Simple Counter

Object-Oriented Programming wiht Java Burapha University, 2001 Events  Events เป็นวัตถุ (Objects) แทนเหตุการณ์ ที่เกิดจากการที่การกระทำใดๆ กับวัตถุ หนึ่ง  ตัวอย่าง * button clicked เป็นเหตุการณ์ที่ button ถูกคลิก * mouse dragged เป็นเหตุการณ์ที่ mouse ถูกลาก * Enter key pressed เป็นเหตุการณ์ที่ Enter key ถูกกด  Component จะสร้าง Events (fire Event) เมื่อ เกิดเหตุการณ์หนึ่ง เหตุการณ์ใดขึ้นกับ Component นั้น

Object-Oriented Programming wiht Java Burapha University, 2001 Events  วัตถุที่เป็น Event บอก information ต่อไปนี้ * สิ่งใดทำให้เกิด event?: Source * event ที่เกิดขึ้นเป็นประเภทใด ?: type * event ที่เกิดขึ้นถูกดักไว้หรือไม่ ? โดย ใคร ? :Handler/Listener

Object-Oriented Programming wiht Java Burapha University, 2001 Event Sources  Low level * Keyboard * Mouse Event  Conceptual * Window * Component * Selection

Object-Oriented Programming wiht Java Burapha University, 2001 Event Types  Keyboard Event : * key pressed * key released * key typed  Mouse Event : * mouse moved * button pressed/released/clicked * mouse dragged * enter/leave/cross

Object-Oriented Programming wiht Java Burapha University, 2001 Event Types  Window Event : * Activated, Deactivated, Resized/Iconified, Opened, Closed vs. Closing  Component Event : * Displayed, Moved, Resized, Focus change, Container specific events  Selection Event : * Generated by “selectable” components : trees, tables, lists, menu buttons * What is being selected / deselected

Object-Oriented Programming wiht Java Burapha University, 2001 Event Handlers/Listeners  Event handler/Event Listener * Separate Object * same class as Event Source Container *..

Object-Oriented Programming wiht Java Burapha University, 2001 Events * Event sources? * Event type? * Event Listeners?

Object-Oriented Programming wiht Java Burapha University, 2001 Event-driven Programming  Procedural Programming การเขียนโปรแกรมเพื่อจัดการ ปัญหาแบบมีโครงสร้าง และมีลำดับ ที่ได้กำหนดไว้ล่วงหน้าแล้ว  Event-driven Programming การเขียนโปรแกรมเพื่อจัดการ ปัญหา โดยลำดับการทำงานของ Code ถูกเรียกใช้งานหรือไม่ ขึ้นอยู่ กับการกระทำหรือเหตุการณ์ที่ เกิดขึ้นจากการกระทำ (Event)

Object-Oriented Programming wiht Java Burapha University, 2001 AWT Events  Component Events : ความหมายเหมือนกันทุก กรณี * Components - ComponentEvent, FocusEvent, KeyEvent, MouseEvent, PaintEvent * Containers - ContainerEvent * Windows - WindowEvent  Semantic Events : event จะมีความหมาย แตกต่างกันไปขึ้นกับวัตถุที่สร้าง (fire) event นั้นๆ * ActionEvent, ItemEvent, TextEvent, AdjustmentEvent  Package ชื่อ java.awt.AWTEvent

Object-Oriented Programming wiht Java Burapha University, 2001 AWT Event Class Hierarchy EventObject AWTEvent ActionEvent ComponentEvent AdjustmentEvent TextEvent ItemEvent ContainerEvent MouseEvent keyEvent FocusEvent InputEvent PaintEvent WindowEvent

Object-Oriented Programming wiht Java Burapha University, 2001 AWT Events Component Event Generated Generate When ButtonActionEvent Clicked Selected or deselected Moved, resized, hidden or shown Checkbox CheckboxMenuItem Gained or loses fccus Pressed or released ComponentEventComponent Double Clicked ItemEvent ContainerContainerEventAdded or removed ItemEvent Selected or deselected Choice FocusEvent KeyEvent ListActionEvent ItemEventSelected or deselected SelectedActionEventMenuItem MovedAdjustmentEventScrollbar ChangedTextEventTextComponent Completed editingTextEventTextField Opened, closed, iconified, deiconified, etc.WindowEventWindow

Object-Oriented Programming wiht Java Burapha University, 2001 Events Delegation Model User Action User Action Source Object Source Object Triggering an event Target/Listener Object Target/Listener Object Event Object Event Object Registering for an event Creating an event Notify Event Listener Handle event Event Handler

Object-Oriented Programming wiht Java Burapha University, 2001 Delegation Event Model  Delegation Event Model (JDK 1.1 และสูงกว่า ) * Event Source - เป็นวัตถุ ยกตัวอย่างเช่น ปุ่ม หรือ scrollbar ที่สร้าง Event โดย ที่ Event Source มี เมทธอดที่ให้วัตถุใดๆ สามารถลงทะเบียน (register) เป็น listener เพื่อให้วัตถุดังกล่าวได้รับ แจ้ง (notify) จาก Event Source เมื่อ มี Event เกิดขึ้น * Event Listener - เ ป็ น วัตถุ ที่ ได้รับแจ้ง (notify) จาก Event Source เมื่อมี Event เกิดขึ้น * Event object – เป็นวัตถุที่เก็บข้อมูลเกี่ยวกับ เหตุการณ์ที่เกิดขึ้นบน Event Source และจะถุ กส่งผ่านไปยัง Event Listener

Object-Oriented Programming wiht Java Burapha University, 2001  Delegation Event Model * Listener ต้อง implements “Listener” Interfaces ซึ่ง เป็น Interfaces ที่สนับสนุนการดักฟัง event * Listener ทำการ Register กับ Event Source เพื่อ ดักฟัง event * เมื่อเกิด Event ขึ้นบน Event Source แล้ว Event Source ต้อง notify ทุกๆ Listeners ที่ดักฟัง * เมื่อเกิด Listener ได้รับ notify จาก Event Source ที่แล้วจะจัดการกับ Event โดยใช้ Event Handler Delegation Event Model

Object-Oriented Programming wiht Java Burapha University, 2001  แต่ละ Event class มี “Listener” interface ที่ เกี่ยวข้องกับ Event class นั้น  แต่ละ interface จะมี method จำนวน 1 หรือ มากกว่า 1 method ที่สอดคล้องกับประเภท ของ event Delegation Event Model

Object-Oriented Programming wiht Java Burapha University, 2001 Events Handlers  แต่ละ Event จะมี Interface และ Listener Method ที่ เป็น callback สำหรับจัดการ Event Event Class Listener Interface Listener Methods ActionEventActionListener ItemEventItemListener actionPerformed(ActionEvent) itemSateChanged(ItemEvent) WindowEventWindowListener windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(Wi ndowEvent) windowDeiconfiied(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) ContainerEventContainerListener componentAdded(ContainerEvent) componentRemoved(ContainerEvent) FocusEventFocusListener focusGained(FocusrEvent) focusLost(FocusrEvent)

Object-Oriented Programming wiht Java Burapha University, 2001 Events Handlers Event Class Listener Interface Listener Methods MouseEventMouseListener mouseClicked(MouseEvent) mouseEntered(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) MouseDragged(MouseEvent) mouseMoved(MouseEvent) TextEvent TextListenertextValueChanged(TextEvent) componentRemoved(ContainerEvent) ComponentEventComponentListener compoenentHidden(ComponentEvent) MouseMotionListener AdjustmentEventAdjustmentListener adjustmentValueChanged(AdjustmentrEvent) compoenentMoved(ComponentEvent) compoenentResized(ComponentEvent) compoenentShown(ComponentEvent)

Object-Oriented Programming wiht Java Burapha University, 2001 Example of Listener Interface public interface MouseListener { public void mouseMoved(MouseEvent e); public void mouseReleased(MouseEvent e); public void mousePressed(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e); } public interface WindowListener { public void windowClosed(WindowEvent e); public void windowIconified(WindowEvent e); public void windowDeiconified (WindowEvent e); public void windowActivate(WindowEvent e); public void windowDeactivated (WindowEvent e); public void windowClosing(WindowEvent e); }

Object-Oriented Programming wiht Java Burapha University, 2001 Example of Listener Interface public interface ActionListener { public void actionPerformed (ActionEvent e); } public interface ItemListener { public void itemStateChanged (ItemEvent e); } public interface ComponentListener { public void componentHidden(CompoentEvent e); public void componentMoved(CompoentEvent e); public void componentResized(CompoentEvent e); public void componentShown(CompoentEvent e); }

Object-Oriented Programming wiht Java Burapha University, 2001 Registering Event Listener  กำหนดคลาส ที่ implement “Listener” interface  ในคลาสดังกล่าว เพิ่มเติมส่วน implementation ใน method ที่ Interface กำหนดไว้ ให้ implement  ใน Event Source เพิ่มคลาสดังกล่าวเพื่อเป็น Listener ของ Event Source นั้นด้วยการ Register เพื่อดักฟัง event  Listeners ต้อง register กับ Event Source public void addXXXListener(XXXListener)

Object-Oriented Programming wiht Java Burapha University, 2001 Registering Listeners  การ Register เพื่อดักฟัง event  Listeners ต้อง register กับ Event Source public void addXXXListener(XXXListener) เช่น addActionListener, addItemListener เป็น ต้น  สามารถมีหลายๆ Listeners (Multiple listeners) register เพื่อดักฟัง event เดียวกันจาก Event Source เดียวกันได้ * event หนึ่งอาจก่อให้เกิด (trigger) การ ตอบสนองหลายรูปแบบ * โดยที่ event จะต้องถูก Broadcast ไปให้กับ ทุก Listener ที่ได้ register ไว้

Object-Oriented Programming wiht Java Burapha University, 2001 Multiple Listeners User Action User Action Source Object Source Object Triggering an event Listener Object Listener Object Event Object Event Object Registering for an event Creating an event Notify all Event Listeners Handle event Event Handler Listener Object Listener Object Registering for an event Handle event Event Handler

Object-Oriented Programming wiht Java Burapha University, 2001 MyFrame import java.awt.*; import java.awt.event.*; public class MyFrame extends Frame implements WindowListener { public static void main(String[] args) { Frame f = new MyFrame("Test Frame"); f.setSize(200,300); f.setVisible(true); } public MyFrame(String title) { super(title); addWindowListener(this); } public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowOpened(WindowEvent e) {} public void windowClosing(WindowEvent e) { System.exit(0); } }

Object-Oriented Programming wiht Java Burapha University, 2001 TestMouseEvent import java.awt.*; import java.awt.event.*; public class TestMouseEvent extends MyFrame implements MouseListener { private int x, y = 0; public static void main(String[] args) { Frame f = new TestMouseEvent("Test MouseEvent"); f.setSize(200,300); f.setVisible(true); } public TestMouseEvent(String title) { super(title); addMouseListener(this); } public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void paint(Graphics g) { g.fillRect(x-5, y-5, 10, 10); } }

Object-Oriented Programming wiht Java Burapha University, 2001 TestActionEvent import java.awt.*; import java.awt.event.*; public class TestActionEvent extends MyFrame implements ActionListener { public static void main(String[] args) { Frame f = new TestActionEvent("Test MouseEvent"); f.pack(); f.setVisible(true); } public TestActionEvent(String title) { super(title); this.setLayout(new FlowLayout()); Button b = new Button("close"); b.addActionListener(this); this.add(b); } public void actionPerformed(ActionEvent e) { String actionCmd = e.getActionCommand(); if (e.getSource() instanceof Button) if (actionCmd.equals("close")) System.exit(0); }

Object-Oriented Programming wiht Java Burapha University, 2001 TestPanel : public class TestPanel extends MyFrame implements ActionListener { private TextField tfNum; private Button b[] = new Button[6]; public TestPanel(String title) { super(title); Panel p = new Panel(); p.setLayout(new GridLayout(3,2)); for (int i=0; i<6; i++) { p.add(b[i] = new Button(" "+i+" ")); b[i].addActionListener(this); } tfNum = new TextField(); this.add(p, BorderLayout.CENTER); this.add(tfNum, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e) { String actionCmd = e.getActionCommand(); if (e.getSource() instanceof Button) tfNum.setText(actionCmd); }

Object-Oriented Programming wiht Java Burapha University, 2001 TwoInOneListeners import java.awt.*; import java.awt.event.*; public class TwoInOneListeners implements MouseMotionListener, MouseListener { private Frame f; private TextField tf; public static void main(String[] args) { TwoInOneListeners l = new TwoInOneListeners(); l.go(); } public void go() { f = new Frame("TwoInOne Listeners"); f.add(new Label("Click and drag the mouse"), BorderLayout.NORTH); tf = new TextField(30); f.add(tf, BorderLayout.SOUTH); f.addMouseMotionListener(this); f.addMouseListener(this); f.setSize(200,200); f.setVisible(true); }

Object-Oriented Programming wiht Java Burapha University, 2001 // These are MouseMotionListener events public void mouseDragged(MouseEvent e) { String s = "Mouse dragging: X = "+e.getX()+" Y = "+e.getY(); tf.setText(s); } public void mouseMoved(MouseEvent e) {} // These are MouseListener events public void mousePressed(MouseEvent e) {} public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) { tf.setText("The mouse entered"); } public void mouseExited(MouseEvent e) { tf.setText("The mouse has left the building"); } public void mouseReleased(MouseEvent e) {} }

Object-Oriented Programming wiht Java Burapha University, 2001 TwoListeners import java.awt.*; import java.awt.event.*; public class TwoListeners { private Frame f; private TextField tf; class MouseHandler implements MouseListener { public void mousePressed(MouseEvent e) {} public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) { tf.setText("The mouse entered"); } public void mouseExited(MouseEvent e) { tf.setText("The mouse has left the building"); } public void mouseReleased(MouseEvent e) {} }

Object-Oriented Programming wiht Java Burapha University, 2001 class MouseMotionHandler implements MouseMotionListener { public void mouseDragged(MouseEvent e) { String s = "Mouse dragging: X = "+e.getX()+" Y = "+e.getY(); tf.setText(s); } public void mouseMoved(MouseEvent e) {} } public static void main(String[] args) { TwoListeners l = new TwoListeners(); l.go(); } public void go() { f = new Frame("Two Listeners"); f.add(new Label("Click and drag the mouse"), BorderLayout.NORTH); tf = new TextField(30); f.add(tf, BorderLayout.SOUTH); f.addMouseMotionListener(new MouseMotionHandler()); f.addMouseListener(new MouseHandler()); f.setSize(200,200); f.setVisible(true); }

Object-Oriented Programming wiht Java Burapha University, 2001 Tips on Event Listeners  Event Listeners เป็น Interfaces ทุกๆ methods จะต้องถูก implement โดยไม่ สนใจว่าจะมีการตอบสนองใน routine ที่ implement หรือไม่  กรณี Multiple Listeners ไม่รับประกันว่า listener ใดๆ จะได้รับการ notify เป็น Listener แรก  กรณี event เกี่ยวกับการเลือกประเภท ( ItemEvent ) Event Source จะสร้าง 2 events ต่อ 1 user action (selection และ deselection)  มี method ในคลาส Event ที่เป็น descriptive method ActionEvent - getActionCommand()

Object-Oriented Programming wiht Java Burapha University, 2001 A Simple Counter Example

Object-Oriented Programming wiht Java Burapha University, 2001 presentation layer ควบคุมสิ่งที่จะปรากฏแก่ผู้ใช้ เป็น interface application layer ทำหน้าที่การทำงานหลักของ application translation layer ทำการ implements ส่วนของ interface BasicCounter CounterHandler CounterInterface application layer translation layer presentation layer ActionListener Frame GUI for a Simple Counter

Object-Oriented Programming wiht Java Burapha University, 2001 Event Handling in Java state setting actions called 4 user interacts with the interface theInterface: CounterInterface theHandler: CounterHandler theCounter: BasicCounter event queue 1 Java generates events 2 Java dispatches events to the ActionListner 3 state inquiry actions called 5 interface reflects changes 6

Object-Oriented Programming wiht Java Burapha University, 2001 Application Layer - BasicCounter BasicCounter - counted: int - max: int - min: int + count() : void + unCount() : void + reset() : void + maxmumIs() : int + minimumIs() : int public class BasicCounter { private int counted; private int max; private int min; public BasicCounter() { counted = 0; max = 10; min = 0; } public BasicCounter(int initCnt, int max, int min){ counted = initCnt; this.max = max; this.min = min; } public void unCount() { counted--; } public void count() { counted++; } public void reset() { counted = 0; } public int numberCountedIs(){ return counted; } public int maximumIs() { return max; } public int minimumIs() { return min; } }

Object-Oriented Programming wiht Java Burapha University, 2001 Presentation Layer - CounterInterface visual design Current Value nnnn +0- display area control area increment button decrement button reset button

Object-Oriented Programming wiht Java Burapha University, 2001 Java AWT Classes ใช้คลาสใน Java AWT เพื่อสร้าง interface Java AWT hierarchy กำหนด collection ของ components ที่มี objects ที่สามารถสร้าง GUIs ได้ Component ContainerButtonLabel PanelWindow Frame

Object-Oriented Programming wiht Java Burapha University, 2001 Relationship between GUI Components Current Value nnnn +0- frame display panel control panel buttons labels

Object-Oriented Programming wiht Java Burapha University, 2001 Implmentation of CounterInterface CounterInterface - enterButton: Button - resetButton: Button - leaveButton: Button - countDisplay: Label + updateDisplay( ): void + setResetState( ): void + setCountState( ): void + setMinimalState( ): void + setMaximalState( ): void Frame import java.awt.*; public class CounterInterface extends Frame { private Button incButton; private Button resetButton; private Button decButton; private Label countDisplay; public CounterInterface(CounterHandler handler){ … } public void updateDisplay(int currentValue) { … … } public void setResetState() { … … } public void setCountState() { … … } public void setMinimalState() { … … } public void setMaximalState() { … … } }

Object-Oriented Programming wiht Java Burapha University, 2001 public CounterInterface(CounterHandler theHandler) { Panel displayPanel = new Panel(); Panel controlPanel = new Panel(); Label countLabel = new Label("Current Value "); countDisplay = new Label(); displayPanel.add(countLabel); displayPanel.add(countDisplay); incButton = new Button("+"); incButton.setActionCommand("inc"); incButton.addActionListener(theHandler); controlPanel.add(incButton); resetButton = new Button("0"); resetButton.setActionCommand("reset"); resetButton.addActionListener(theHandler); controlPanel.add(resetButton); decButton = new Button( "-"); decButton.setActionCommand("dec"); decButton.addActionListener(theHandler); controlPanel.add(decButton); add("North", displayPanel); add("South", controlPanel); setSize(200, 150); show(); } associate action with button associate action handler with action subclass of ActionListener variable declarations initialize display panel initialize control panel initialize frame - visual appearance - ways to interact with the system

Object-Oriented Programming wiht Java Burapha University, 2001 public void updateDisplays(int currentValue) { countDisplay.setText(" " + currentValue + " "); } public void setResetState(){ incButton.setEnabled(true); resetButton.setEnabled(false); decButton.setEnabled(false); } public void setCountingState(){ incButton.setEnabled(true); resetButton.setEnabled(true); decButton.setEnabled(true); } public void setMinimalState(){ incButton.setEnabled(true); resetButton.setEnabled(true); decButton.setEnabled(false); } public void setMaximalState(){ incButton.setEnabled(false); resetButton.setEnabled(true); decButton.setEnabled(true); } interface for CounterHandler to update the display setText is method defined in Label class setEnable is a method defined in Button class

Object-Oriented Programming wiht Java Burapha University, 2001 Translation Layer - CounterHandler model of dynamic behavior counting state reset state maximal state minimal state count not pre-max pre-max not pre-min pre-min count unCount reset

Object-Oriented Programming wiht Java Burapha University, 2001 Implementation of CounterHandler Class CounterHandler - theCounter: BasicCounter - theInterface: CounterInterface - RESET_STATE: int - COUNT_STATE: int - MINIMAL_STATE: int - MAXIMAL_STATE: int - curState: int + actionPerformed( ): void - isPreMinimal( ): boolean - isPreMaximal( ): boolean ActionListener import java.awt.*; import java.awt.event.*; public class CounterHandler implements ActionListener { private BasicCounter theCounter; private CounterInterface theInterface; private static final int INITIAL_STATE = 0; private static final int RESET_STATE = 1; private static final int COUNTING_STATE = 2; private static final int MINIMAL_STATE = 3; private static final int MAXIMAL_STATE = 4; private static int curState = INITIAL_STATE; public CounterHandler() { … … } public void actionPerformed(ActionEvent e) { … } private boolean isPreMinimal() { … … } private boolean isPreMaximal() { … … } }

Object-Oriented Programming wiht Java Burapha University, 2001 public CounterHandler( ) { theCounter = new BasicCounter( ); theInterface = new CounterInterface(this); theInterface.setResetState( ); curState = RESET_STATE; theInterface.updateDisplays(theCounter.numberCountedIs( )); } private boolean isPreMinimal( ) { return ( theCounter.numberCountedIs() - theCounter.minimumIs( )) == 1; } private boolean isPreMaximal( ) { return( theCounter.maximumIs( ) - theCounter.numberCountedIs( )) == 1; } used only inside the class definition initialization

Object-Oriented Programming wiht Java Burapha University, 2001 actionPerformed( ) Method public void actionPerformed(ActionEvent event) { String buttonPressed = event.getActionCommand(); if (buttonPressed.equals("inc")) { if (curState == RESET_STATE) { theInterface.setCountingState(); curState = COUNTING_STATE; } else if (curState == MINIMAL_STATE) { theInterface.setCountingState(); curState = COUNTING_STATE; } else if (isPreMaximal()) { theInterface.setMaximalState(); curState = MAXIMAL_STATE; } theCounter.count(); } else if (buttonPressed.equals( "dec")) { if (curState == MAXIMAL_STATE) { theInterface.setCountingState(); curState = COUNTING_STATE; } else if (this.isPreMinimal()) { theInterface.setMinimalState(); curState = MINIMAL_STATE; } theCounter.unCount(); } else { theInterface.setResetState(); curState = RESET_STATE; theCounter.reset(); } theInterface.updateDisplays(theCounter.numberCountedIs()); } “ + ” button pressed “ - ” button pressed “ 0 ” button pressed

Object-Oriented Programming wiht Java Burapha University, 2001 ClientDemo actions จะถูก performed เฉพาะเมื่อเกิด events public class ClientDemo { public static void main(String args[]) { CounterHandler handler = new CounterHandler(); System.out.print("it's waiting for action..."); }

Object-Oriented Programming wiht Java Burapha University, 2001 Summary q Event q Event Source, Event Object, Event Listener q Delegation Event Model q Java AWT Event q AWT Event Handling q Interface & Event Listeners q Example of a Simple Counter