SlideShare a Scribd company logo
บทที่ 7
 การจัด การกับ เหตุก ารณ์
        กราฟฟิก
 (GUI Event Handling)

    อ.ธนิศ า เครือ ไวศยวรรณ
   คณะเทคโนโลยีส ารสนเทศ
สถาบัน เทคโนโลยีพ ระจอมเกล้า เจ้า
วัต ถุป ระสงค์
 นิย ามความหมายของเหตุก ารณ์

 แนะนำา คลาสประเภท Event     ทีเ กีย วข้อ งกับ
                                ่ ่
 เหตุก ารณ์ก ราฟฟิก ต่า งๆ
 แนะนำา อิน เตอร์เ ฟสประเภท Listener ทีใ ช้ใ นการ
                                        ่
 รับ ฟัง เหตุก ารณ์
 อธิบ ายวิธ ีก ารสร้า งออปเจ็ค ของคลาสประเภท
 Event Handler
 อธิบ ายวิธ ีก ารจัด การกับ เหตุก ารณ์ก ราฟฟิก
 หลายๆเหตุก ารณ์
 แนะนำา คลาสประเภท     Event Adapter
เหตุก ารณ์
 เหตุก ารณ์ (Event) เป็น สถานการณ์ท เ กิด ขึ้น ใน
                                         ี่
 ขณะรัน โปรแกรม อาทิเ ช่น การใช้อ ิน พุต (เมาส์
 หรือ คีย บ อร์ด ) ติด ต่อ กับ โปรแกรม GUI
          ์
 การเกิด เหตุก ารณ์ใ นโปรแกรมภาษาจาวาจะ
 เป็น การสร้า งออปเจ็ค ของคลาสประเภท Event
 ชนิด ต่า งๆขึ้น มาตามประเภทของเหตุก ารณ์ อาทิ
 เช่น
  • เมื่อ เลื่อ นเมาส์ใ นเฟรมจะเกิด ออปเจ็ค ของคลาส
    MouseEvent    ขึ้น มา
  • เมื่อ ปิด เฟรมจะเกิด ออปเจ็ค ของคลาส WindowEvent ขึ้น
    มา
  • เมื่อ กดปุ่ม ที่อ ยู่ใ นเฟรมจะเกิด ออปเจ็ค ของคลาส
    ActionEvent ขึ้น มา
คลาสประเภท            Event

 ออปเจ็ค ของคลาสประเภท Event    ทีเ กิด ขึ้น จะแตก
                                   ่
  ต่า งกัน ตามประเภทของเหตุก ารณ์
 คลาสประเภท Event ในภาษาจาวาจะสืบ ทอดจาก
  คลาสทีชื่อ EventObject
           ่
 คลาสประเภท Event สำา หรับ เหตุก ารณ์ท าง
  กราฟฟิก จะสืบ ทอดจากคลาส AWTEvent
 คลาสประเภท Event สำา หรับ เหตุก ารณ์ท าง
  กราฟฟิก จะอยู่ใ นแพคเก็จ java.awt.event
คลาสประเภท Event สำา หรับ
   เหตุก ารณ์ก ราฟฟิก
องค์ป ระกอบของ               Event

 Event   คือ ออปเจ็ค ตามประเภทของเหตุก ารณ์
 Event   Source คือ ส่ว นทีท ำา ให้เ กิด เหตุก ารณ์
                            ่
 Event  Handler คือ ออปเจ็ค ที่จ ะทำา หน้า ทีจ ัด การ
                                               ่
 กับ เหตุก ารณ์ท เ กิด ขึ้น โดยมีเ มธอดทีจ ะรับ ออปเจ็
                  ี่                     ่
 คชนิด Event ดัง กล่า วและมีค ำา สัง ในการจัด การกับ
                                     ่
 เหตุก ารณ์เ พือ โต้ต อบกับ ผู้ใ ช้
               ่
AWTEvent

 คลาส AWTEvent เป็น superclass ของคลาส
  ประเภท Event สำา หรับ เหตุก ารณ์ท างด้า นกราฟฟิก
  ซึ่ง จะมีอ ยูท ง หมด 11 คลาสคือ ActionEvent,
               ่ ั้
  AdjustmentEvent, ComponentEvent, ItemEvent,
  TextEvent, FocusEvent, WindowEvent, InputEvent,
  ContainerEvent, KeyEvent และ MouseEvent
 คลาส AWTEvent       และคลาส      ObjectEvent      มีเ มธอดที่
 สำา คัญ ดัง นี้
  •   Object getSource()   เพื่อ เรีย กดูอ อปเจ็ค ประเภท Event
      Source
  •   int getID()   เพื่อ ระบุช นิด ของเหตุก ารณ์
ActionEvent

 จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน
                           ี่ ี
 โปรแกรม GUI ดัง นี้
   • เมื่อ มีก ารคลิก เมาส์บ นปุ่ม (Button)
   • เมื่อ มีก ารป้อ นคีย ์ Enter ใน TextField
   • เมื่อ มีก ารเลือ กเมนูใ น MenuItem
   • เมื่อ มีก ารกด double click ใน List

 เมธอดทีส ำา คัญ ของคลาส ActionEvent
         ่                                            มีด ัง นี้
   •   String getActionCommand() จะส่ง ชื่อ คำา สั่ง ที่เ กิด ขึ้น จาก
       ActionEvent
   •   int getModifier() จะส่ง สถานะของคีย ์ Modifier (คีย ์
       Alt, Ctrl, Meta และ Shift) ที่เ กิด ขึ้น จากออปเจ็ค ของ
       คลาส ActionEvent
WindowEvent

 จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น เป็น
                           ี่ ี
  ออปเจ็ค ของคลาสประเภท               Window   มีร ูป แบบต่า งๆ
  ดัง นี้
   • opened
   • closed
   • closing
   • iconified
   • deiconified
   • activated
   • deactivated

 เมธอดทีส ำา คัญ ของคลาส WindowEvent
         ่                                        มีด ัง นี้
   •   Object getWindow()   จะส่ง ออปเจ็ค ที่เ ป็น Event Source
       ชนิด Window คืน มา
MouseEvent

 จะถูก สร้า งขึ้น ในกรณีท ม ก ารใช้ง านเมาส์เ พือ
                           ี่ ี                  ่
 ติด ต่อ กับ ผู้ใ ช้โ ดยมีเ หตุก ารณ์ท เ กิด ขึ้น ได้ด ัง นี้
                                       ี่
   • dragged
   • moved
   • clicked
   • entered
   • exited
   • pressed
   • released
MouseEvent

 เมธอดทีส ำา คัญ ของคลาส MouseEvent
         ่                                        มีด ัง นี้
  •   int getX()   จะส่ง ตำา แหน่ง พิก ัด ของเมาส์แ กน X ที่ม ีช นิด
      ข้อ มูล เป็น int คืน มา
  •   int getY() จะส่ง ตำา แหน่ง พิก ัด ของเมาส์แ กน Y ที่ม ีช นิด
      ข้อ มูล เป็น int คืน มา
  •   Point getPoint() จะส่ง ตำา แหน่ง พิก ัด (x,y) ของเมาส์ค ืน
      มา โดยมีช นิด ข้อ มูล                          เป็น ออปเจ็ค
      ของคลาส Point
  •   int getClickCount() จะส่ง จำา นวนครั้ง ของการ คลิก เมาส์
      คืน มา
ItemEvent

 จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน
                           ี่ ี
 โปรแกรม GUI ดัง นี้
   • เมื่อ มีก ารเลือ กหรือ ยกเลิก รายการใน List        หรือ
     Checkbox
   • เมื่อ มีก ารคลิก เมาส์ร ายการใน Choice

 เมธอดทีส ำา คัญ ของคลาส
         ่                            ItemEvent มีด ัง นี้
   •   ItemSelectable getItemSelectable()      จะส่ง ออปเจ็ค ของ
       คลาสประเภท
       ItemSelectable ที่เ ป็น Event Source คืน มา
   •   Object getItem() จะส่ง ออปเจ็ค ของรายการที่ถ ูก เลือ ก
       คืน มา
   •   int getStateChange() จะส่ง ค่า คงที่ช นิด int ที่ม ีค ่า เป็น
       SELECTED หรือ                       DESELECTED เพื่อ
       ระบุส ถานการณ์เ ลือ กของรายการคืน มา
Event   อื่น ๆ
   KeyEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี
                          ่ ี                 ่
    เหตุก ารณ์ก ารกดคีย บ อร์ด
                        ์
   FocusEvent  เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ ผู้ใ ช้
                             ่ ี                     ่
    เลื่อ นอุป กรณ์อ ิน พุต มาชี้ย ง ออปเจ็ค ของส่ว น
                                   ั
    ประกอบกราฟฟิก ใดๆ
   ComponentEvent   เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี
                                ่ ี                    ่
  เหตุก ารณ์ซ งึ่
  ออปเจ็ค ของส่ว นประกอบกราฟฟิก มีก าร
  เปลี่ย นแปลงเช่น เคลื่อ นทีห รือ ปรับ ขนาด
                              ่
 ContainerEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ
                                ่ ี                ่
  มีเ หตุก ารณ์ใ นการใส่ห รือ ยกเลิก ออปเจ็ค ของส่ว น
  ประกอบกราฟฟิก ลงในออปเจ็ค ของคลาสประเภท
Event   อื่น ๆ
   AdjustmentEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ
                               ่ ี                   ่
  มีเ หตุก ารณ์ใ นการปรับ ตำา แหน่ง ชี้ข องออปเจ็ค
  ของคลาส ScrollBar หรือ ScrollPane
 TextEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี
                         ่ ี                   ่
  เหตุก ารณ์ใ นการเปลี่ย นแปลงข้อ ความในออปเจ็ค
  ของคลาส TextArea
อิน เตอร์เ ฟสประเภท                Listener

 ภาษาจาวาจะจัด การกับ เหตุก ารณ์โ ดยการสร้า ง
  ออปเจ็ค ทีส ามารถรับ ฟัง เหตุก ารณ์จ ากคลาสที่
            ่
  implements อิน เตอร์เ ฟสประเภท Listener ที่
  สอดคล้อ งกัน
 ออปเจ็ค นีจ ะทำา หน้า ที่เ ป็น
            ้                      Event Handler
 อาทิเ ช่น
          ออปเจ็ค ทีจ ะจัด การกับ เหตุก ารณ์ป ระเภท
                    ่
  ActionEvent จะต้อ ง implements อิน เตอร์เ ฟส
  ActionListener
อิน เตอร์เ ฟสประเภท               Listener

   ActionListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ
    คลาส   ActionEvent
   AdjustmentListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค
    ของคลาส    AdjustmentEvent
   ComponentListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค
    ของคลาส    ComponentEvent
   ContainerListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค
    ของคลาส    ContainerEvent
   FocusListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ
    คลาส   FocusEvent
อิน เตอร์เ ฟสประเภท               Listener

   ItemListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ
    คลาส   ItemEvent
   KeyListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ
    คลาส   KeyEvent
   MouseListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ
    คลาส   MouseEvent
   MouseMotionListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออป
    เจ็ค ของคลาส      MouseEvent
เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์
        ่
                            เมธอดทีใ ช้ร ับ ฟัง
                                   ่
     อิน เตอร์เ ฟส
                      เหตุก ารณ์
ActionListener         addActionListener()
ItemListener           addItemListener()
KeyListener            addKeyListener()
MouseListener          addMouseListener()
MouseMotionListener    addMouseMotionListener()
TextListener          addTextListener()
FocusListener          addFocusListener()
AdjustmentListener     addAdjustmentListener()
เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์
        ่

                           เมธอดทีใ ช้ร ับ ฟัง
                                  ่
     อิน เตอร์เ ฟส
                     เหตุก ารณ์
ComponentListener     addComponentListener()
ContainerListener     addContainerListener()
WindowListener        addWindowListener()
เมธอดที่ต ้อ งลงทะเบีย นเมื่อ ต้อ งการ
      จัด การกับ เหตุก ารณ์
     อิน เตอร์เ ฟส       เมธอดทีต ้อ ง
                                ่         implements
                     keyPressed(KeyEvent)
KeyListener          keyReleased(KeyEvent)
                     keyTyped(KeyEvent)
                     focusGained(FocusEvent)
FocusListener
                     focusLost(FocusEvent)
                     adjustmentValueChanged
AdjustmentListener
                     (AdjustmentEvent)
                     componentMoved(ComponentEvent)
                     componentHidden(ComponentEvent)
ComponentListener
                     componentResized(ComponentEvent)
                     componentShown(ComponentEvent)
เมธอดที่ต ้อ ง implements
     อิน เตอร์เ ฟส        เมธอดทีต ้อ ง
                                 ่        implements
ActionListener        actionPerformed(ActionEvent)
ItemListener          itemStateChanged(ItemEvent)
                      mouseClicked(MouseEvent)
                      mouseEntered(MouseEvent)
MouseListener         mouseExited(MouseEvent)
                      mousePressed(MouseEvent)
                      mouseReleased(MouseEvent)
                      mouseMoved(MouseEvent)
MouseMotionListener
                      mouseDragged(MouseEvent)
เมธอดที่ต ้อ ง implements
     อิน เตอร์เ ฟส       เมธอดทีต ้อ ง
                                ่         implements
                     keyPressed(KeyEvent)
KeyListener          keyReleased(KeyEvent)
                     keyTyped(KeyEvent)
                     focusGained(FocusEvent)
FocusListener
                     focusLost(FocusEvent)
                     adjustmentValueChanged
AdjustmentListener
                     (AdjustmentEvent)
                     componentMoved(ComponentEvent)
                     componentHidden(ComponentEvent)
ComponentListener
                     componentResized(ComponentEvent)
                     componentShown(ComponentEvent)
เมธอดที่ต ้อ ง implements
     อิน เตอร์เ ฟส       เมธอดทีต ้อ ง
                                ่        implements
                     windowOpened(WindowEvent)
                     windowClosed(WindowEvent)
                     windowClosing(WindowEvent)
WindowListener       windowIconified(WindowEvent)
                     windowDeiconified(WindowEvent)
                     windowActivated(WindowEvent)
                     windowDeactivated(WindowEvent)
                     componentAdded(ContainerEvent)
ContainerListener
                     componentRemoved(ContainerEvent)
TextListener         textValueChanged(TextEvent)
การจัด การกับ เหตุก ารณ์
 ภาษาจาวาจะมีว ิธ ีก ารจัด การกับ เหตุก ารณ์ท เ รีย ก
                                               ี่
 ว่า Delegation Model โดยจะมีห ลัก การดัง นี้
   • ออปเจ็ค ของส่ว นประกอบกราฟฟิก ใดๆสามารถเป็น
     ออปเจ็ค ประเภท Event Source ได้ อาทิเ ช่น ออปเจ็ค
     ของคลาส Button สามารถเป็น Event Source ของ
     ActionEvent ได้
   • คลาสใดๆสามารถรับ ฟัง เหตุก ารณ์ใ ดๆก็ไ ด้ ถ้า คลาสนั้น
     implements อิน เตอร์เ ฟสประเภท Listener ที่ส อดคล้อ งกัน
     อาทิเ ช่น คลาสที่ต ้อ งการรับ ฟัง เหตุก ารณ์ ActionEvent
     จะต้อ ง implements อิน เตอร์เ ฟสที่ช ื่อ ActionListener
   • ออปเจ็ค ประเภท Event ที่เ กิด จาก Event Source จะถูก
     ส่ง ไปยัง ออปเจ็ค ของคลาสที่ส ามารถรับ ฟัง เหตุก ารณ์
     ประเภทนั้น
ออปเจ็ค ของคลาสประเภท Event
            Handler
 Event  Source ใดต้อ งการทีจ ะจัด การกับ
                             ่
 เหตุก ารณ์ใ ดต้อ งลงทะเบีย นเพื่อ รับ ฟัง เหตุก ารณ์
 โดยมีร ูป แบบดัง นี้
          eventSource.addXxxListener(listener)

 เราสามารถสร้า งออปเจ็ค ของคลาสประเภท
 Event Handler ได้ห ลายรูป แบบดัง นี้
  • กำา หนดคลาสภายนอกคลาสที่ใ ช้ใ นการจัด การ
    เหตุก ารณ์
  • กำา หนดคลาสที่เ ป็น คลาสภายในอยู่ใ นคลาสที่ใ ช้ใ นการ
    จัด การเหตุก ารณ์
  • กำา หนดให้ค ลาสที่ใ ช้ใ นการจัด การเหตุก ารณ์
    implements อิน เตอร์เ ฟสประเภท Listener ที่ส อดคล้อ งกัน
    และสร้า งออปเจ็ค ของคลาสดัง กล่า วภายในคลาสเอง
  • กำา หนดคลาสภายในเมธอด (คลาสประเภท
ตัว อย่า งโปรแกรม
import java.awt.*;
 import java.awt.*;
import java.awt.event.*;
 import java.awt.event.*;

public class EventDemo1 {{
 public class EventDemo1
   public static void main(String args[]) {{
    public static void main(String args[])
     Frame fr == new Frame("Event Demo");
      Frame fr    new Frame("Event Demo");
     Button bn1 == new Button("Exit");
      Button bn1    new Button("Exit");
     fr.setLayout(new FlowLayout());
      fr.setLayout(new FlowLayout());
     bn1.addActionListener(new ActionHandler());
      bn1.addActionListener(new ActionHandler());
     fr.add(bn1);
      fr.add(bn1);
     fr.setSize(200,200);
      fr.setSize(200,200);            ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแก
                                                ี่
     fr.setVisible(true);
      fr.setVisible(true);
     }}
}}
public class ActionHandler implements ActionListener {{
 public class ActionHandler implements ActionListener
     public void actionPerformed(ActionEvent ev) {{
      public void actionPerformed(ActionEvent ev)
     System.exit(0);
      System.exit(0);
     }}
}}
คำา อธิบ ายโปรแกรม
 คลาส EventDemo1 มีป ุ่ม ที่ช อ bn1 ซึ่ง ลงทะเบีย นรับ ฟัง
                               ื่
  เหตุก ารณ์ป ระเภท ActionEvent จากคำา สั่ง
     bn1.addActionListener(new ActionHandler());

 คำา สั่ง new ActionHandler()เป็น การสร้า งออปเจ็ค ทีใ ช้
                                                      ่
  ในการจัด การกับ เหตุก ารณ์ป ระเภท ActionEvent
 คลาส ActionHandler จะต้อ ง implements อิน เตอร์เ ฟส
  ชื่อ ActionListener
 เมธอดทีต ้อ ง implements
         ่                   ในคลาสคือ
     public void actionPerformed(ActionEvent ev)
ตัว อย่า งโปรแกรม
import java.awt.*;
 import java.awt.*;
import java.awt.event.*;
 import java.awt.event.*;

public class EventDemo2 {{
 public class EventDemo2
   private Frame fr;
    private Frame fr;
   private TextField tf;
    private TextField tf;
   public EventDemo2() {{
    public EventDemo2()
        fr == new Frame("Event Demo");
         fr    new Frame("Event Demo");
        tf == new TextField(15);
         tf    new TextField(15);
        fr.setLayout(new FlowLayout());
         fr.setLayout(new FlowLayout());
        fr.add(tf);
         fr.add(tf);
        fr.setFont(new Font("TimesRoman",Font.BOLD,16));
         fr.setFont(new Font("TimesRoman",Font.BOLD,16));
        fr.addMouseMotionListener(new MouseHandler());
         fr.addMouseMotionListener(new MouseHandler());
        fr.setSize(200,200);
         fr.setSize(200,200);
        fr.setVisible(true);
         fr.setVisible(true);
   }}
   public class MouseHandler implements MouseMotionListener {{
    public class MouseHandler implements MouseMotionListener
ตัว อย่า งโปรแกรม
            public void mouseDragged(MouseEvent ev) {{
             public void mouseDragged(MouseEvent ev)
                tf.setText("X="+ev.getX()+" Y="+ev.getY());
                 tf.setText("X="+ev.getX()+" Y="+ev.getY());
            }}
            public void mouseMoved(MouseEvent ev) {{ }}
             public void mouseMoved(MouseEvent ev)
       }}
       public static void main(String args[]) {{
        public static void main(String args[])
            EventDemo2 obj == new EventDemo2();
             EventDemo2 obj    new EventDemo2();
       }}
  }}




ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม
          ี่
คำา อธิบ ายโปรแกรม
 ตัว อย่า งโปรแกรม EventDemo2 มีก ารขึ้น ทะ
 เบีย นออปเจ็ค ของคลาส Frame เพือ รับ ฟัง
                                   ่
 เหตุก ารณ์ MouseEvent จากคำา สั่ง
    fr.addMouseMotionListener(new MouseHandler());

 โปรแกรมนี้จ ะแสดงตำา แหน่ง ของเมาส์เ มือ มีก าร
                                         ่
  เลื่อ นเมาส์
 คลาส MouseHandler เป็น คลาสภายใน ทำา ให้
  สามารถเรีย กใช้ค ุณ ลัก ษณะของคลาส
  EventDemo2 ไ ด้ เช่น ออปเจ็ค tf ของคลาส
 TextField
ตัว อย่า งแสดงการสร้า งออปเจ็ค
      ภายในคลาสเดีย วกัน
import java.awt.*;
 import java.awt.*;
import java.awt.event.*;
 import java.awt.event.*;
public class EventDemo3 implements WindowListener{
 public class EventDemo3 implements WindowListener{
   public static void main(String args[]) {{
    public static void main(String args[])
       EventDemo3 obj == new EventDemo3();
        EventDemo3 obj    new EventDemo3();
       obj.init();
        obj.init();
  }}
  public void init() {{
   public void init()
       Frame fr == new Frame("Event Demo");
        Frame fr    new Frame("Event Demo");
       fr.addWindowListener(this);
        fr.addWindowListener(this);
       fr.add(bn1);
        fr.add(bn1);
       fr.setSize(200,200);
        fr.setSize(200,200);
       fr.setVisible(true);
        fr.setVisible(true);
  }}
  public void windowClosing(WindowEvent ev) {{
   public void windowClosing(WindowEvent ev)
       System.exit(0);
        System.exit(0);
  }}
ตัว อย่า งแสดงการสร้า งออปเจ็ค
      ภายในคลาสเดีย วกัน
     public void windowOpened(WindowEvent ev) {{ }}
      public void windowOpened(WindowEvent ev)
     public void windowClosed(WindowEvent ev) {{ }}
      public void windowClosed(WindowEvent ev)
     public void windowIconified(WindowEvent ev) {{ }}
      public void windowIconified(WindowEvent ev)
     public void windowDeiconified(WindowEvent ev) {{ }}
      public void windowDeiconified(WindowEvent ev)
     public void windowActivated(WindowEvent ev) {{ }}
      public void windowActivated(WindowEvent ev)
     public void windowDeactivated(WindowEvent ev) {{ }}
      public void windowDeactivated(WindowEvent ev)
}}




ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม
          ี่
คำา อธิบ ายโปรแกรม
   this   หมายถึง ออปเจ็ค ของคลาสเดีย วกัน
 ตัว อย่า งโปรแกรมใช้อ อปเจ็ค this     ในการจัด การ
  กับ WindowEvent จากคำา สั่ง
      fr.addWindowListener(this);
 คลาส EventDemo3 ต้อ ง implements อิน เตอร์เ ฟส
  WindowListener
 คำา สั่ง System.exit(0); ใน เมธอด
  windowClosing()ทำา ให้ส ามารถออกจากโปรแกรมได้
    โดยการคลิก เมาส์ท เ ครื่อ งหมายกากบาทตรง
                      ี่
    Title Bar
การรับ ฟัง เหตุก ารณ์ห ลาย
                เหตุก ารณ์
 Event Source สามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง
                       ่
 เหตุก ารณ์ห ลายประเภทได้ เช่น
  •   fr.addMouseMotionListener(this);
  •   fr.addWindowListener(this);

 คลาสใดๆสามารถ implements           อิน เตอร์เ ฟสหลาย
 ตัว ได้ เช่น
  •   public class EventDemo4 implements MouseMotionListener,
                                         WindowListener

 EventHandler สามารถทีจ ะจัด การกับ Event
                         ่
 Source ได้ห ลายตัว และ    ออปเจ็ค ของคลาส
 ประเภท Event จะมีเ มธอดในการทีจ ะแยก Event
                                ่
 Source ได้
ตัว อย่า งโปรแกรม
import java.awt.*;
 import java.awt.*;
import java.awt.event.*;
 import java.awt.event.*;
public class EventDemo4 implements MouseMotionListener,
 public class EventDemo4 implements MouseMotionListener,
                                    WindowListener {{
                                     WindowListener
   private Frame fr;
    private Frame fr;
  private TextField tf;
   private TextField tf;
  public EventDemo4() {{
   public EventDemo4()
       fr == new Frame("Event Demo");
        fr    new Frame("Event Demo");
       tf == new TextField(15);
        tf    new TextField(15);
       fr.setLayout(new FlowLayout());
        fr.setLayout(new FlowLayout());
       fr.add(tf);
        fr.add(tf);
       fr.setFont(new Font("TimesRoman",Font.BOLD,16));
        fr.setFont(new Font("TimesRoman",Font.BOLD,16));
       fr.addMouseMotionListener(this);
        fr.addMouseMotionListener(this);
       fr.addWindowListener(this);
        fr.addWindowListener(this);
       fr.setSize(200,200);
        fr.setSize(200,200);
       fr.setVisible(true);
        fr.setVisible(true);
  }}
ตัว อย่า งโปรแกรม
     public static void main(String args[]) {{
      public static void main(String args[])
          EventDemo4 obj == new EventDemo4();
           EventDemo4 obj    new EventDemo4();
     }}
     public void mouseDragged(MouseEvent ev) {{
      public void mouseDragged(MouseEvent ev)
         tf.setText("X="+ev.getX()+" Y="+ev.getY());
          tf.setText("X="+ev.getX()+" Y="+ev.getY());
     }}
     public void mouseMoved(MouseEvent ev) {{ }}
      public void mouseMoved(MouseEvent ev)
     public void windowClosing(WindowEvent ev) {{
      public void windowClosing(WindowEvent ev)
          System.exit(0);
                                        ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแ
                                                  ี่
           System.exit(0);
     }}
     public void windowOpened(WindowEvent ev) {{ }}
      public void windowOpened(WindowEvent ev)
     public void windowClosed(WindowEvent ev) {{ }}
      public void windowClosed(WindowEvent ev)
     public void windowIconified(WindowEvent ev) {{ }}
      public void windowIconified(WindowEvent ev)
     public void windowDeiconified(WindowEvent ev) {{ }}
      public void windowDeiconified(WindowEvent ev)
     public void windowActivated(WindowEvent ev) {{ }}
      public void windowActivated(WindowEvent ev)
     public void windowDeactivated(WindowEvent ev) {{ }}
      public void windowDeactivated(WindowEvent ev)
}}
คลาสประเภท Event Adapter
 คลาสประเภท       Event Adapter คือ คลาสที่ไ ด้
 implements   อิน เตอร์เ ฟส ประเภท Listener ไว้แ ล้ว
 คลาสประเภท     Event Adapter นัน ได้ก ำา หนด
                                            ้
 เมธอดต่า งๆของอิน เตอร์เ ฟสทีต ้อ งเขีย น ไว้แ ล้ว
                                       ่
 แต่จ ะเป็น บล็อ กคำา สัง ทีไ ม่ม ค ำา สัง ใดๆอยูภ ายใน
                        ่ ่       ี      ่       ่
 บล็อ ก
 คลาสประเภท    Event Adapter จะช่ว ยทำา ให้เ ขีย น
 โปรแกรมทีเ ป็น คลาส ประเภท Event Handler ได้
              ่
 ง่า ยขึ้น โดยลดจำา นวนเมธอดทีจ ะต้อ งเขีย นบล็อ ก
                              ่
 คำา สั่ง
คลาสประเภท Event Adapter
 คลาสประเภท        Event Adapter มีด ัง นี้
  •   MouseAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ
      MouseListener
  •   MouseMotionAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่
      ชื่อ MouseMotionListener
  •   ComponentAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่
      ชื่อ ComponentListener
  •   ContainerAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่
      ชื่อ ContainerListener
  •   KeyAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ
      KeyListener
  •   WindowAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ
      WindowListener
  •   FocusAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ
      FocusListener
ตัว อย่า งโปรแกรม
import java.awt.*;
 import java.awt.*;
import java.awt.event.*;
 import java.awt.event.*;

public class EventDemo5 {{
 public class EventDemo5
   public static void main(String args[]) {{
    public static void main(String args[])
          Frame fr == new Frame("Event Demo");
           Frame fr    new Frame("Event Demo");
          fr.addWindowListener(new WindowHandler());
           fr.addWindowListener(new WindowHandler());
          fr.setSize(200,200);
           fr.setSize(200,200);
          fr.setVisible(true);
           fr.setVisible(true);
     }}
}}
public class WindowHandler extends WindowAdapter {{
 public class WindowHandler extends WindowAdapter
     public void windowClosing(WindowEvent ev) {{
      public void windowClosing(WindowEvent ev)
          System.exit(0);
           System.exit(0);
     }}
}}
การสร้า งคลาสแบบ anonymous
 เราสามารถกำา หนดคลาสทัง หมดให้อ ยู่ภ ายใน
                        ้
 เมธอดทีเ รีย กใช้ง าน
        ่
 คลาสประเภทนีเ รีย กว่า คลาสประเภท
              ้
  anonymous
 คลาสประเภท anonymous นิย มใช้ใ นการ
  จัด การ กับ Event เช่น การปิด Frame
ตัว อย่า งโปรแกรม
import java.awt.*;
 import java.awt.*;
import java.awt.event.*;
 import java.awt.event.*;

public class EventDemo6 {{
 public class EventDemo6
   public static void main(String args[]) {{
    public static void main(String args[])
          Frame fr == new Frame("Event Demo");
           Frame fr    new Frame("Event Demo");
          fr.addWindowListener(new WindowAdapter() {{
           fr.addWindowListener(new WindowAdapter()
              public void windowClosing(WindowEvent ev) {{
               public void windowClosing(WindowEvent ev)
                 System.exit(0);
                  System.exit(0);
              }}
          });
           });
          fr.setSize(200,200);
           fr.setSize(200,200);
          fr.setVisible(true);
           fr.setVisible(true);
     }}
}}
สรุป เนื้อ หาของบท
 ออปเจ็ค ของคลาสประเภท Event ในแพจเก็จ
  java.awt.event จะถูก สร้า งขึ้น เมือ มีก ารกระทำา บาง
                                     ่
 อย่า งเกิด ขึ้น กับ ตัว ใส่ส ว นประกอบหรือ ส่ว น
                              ่
 ประกอบกราฟฟิก เช่น ActionEvent เกิด ขึ้น เมือ มี ่
 การกด Button หรือ WindowEvent เกิด ขึ้น เมือ มีก ารปิด
                                             ่
 Frame
 การจะจัด การกับ Event  ประเภทใดนัน โดยทัว ไป
                                       ้         ่
 จะต้อ งสร้า งออปเจ็ค ของคลาสที่ implements
 อิน เตอร์เ ฟสทีส อดคล้อ งกัน กับ Event นัน ด้ว ย เช่น
                ่                         ้
 ถ้า ต้อ งการจัด การกับ WindowEvent จะต้อ งสร้า งออป
 เจ็ค ของคลาสที่ implements อิน เตอร์เ ฟส
 WindowListener โดยการสร้า งออปเจ็ค อาจสร้า งจาก
 คลาสภายนอก คลาสภายใน คลาสเดีย วกัน หรือ
สรุป เนื้อ หาของบท
 คลาสใดๆสามารถ implements      อิน เตอร์เ ฟสได้ห ลาย
 ตัว ทำา ให้ส ามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง เหตุก ารณ์
                     ่
 ได้ห ลายเหตุก ารณ์
 คลาสประเภท      Event Adapter คือ คลาสที่ไ ด้
 implements อิน เตอร์เ ฟส ประเภท Listener ไว้แ ล้ว
 โดยได้ก ำา หนดเมธอดต่า งๆของอิน เตอร์เ ฟสทีต ้อ ง         ่
 เขีย น ไว้แ ล้ว แต่จ ะเป็น บล็อ กคำา สั่ง ทีไ ม่ม ค ำา สั่ง ใดๆ
                                             ่     ี
 อยูภ ายในบล็อ ก
    ่
แบบฝึก หัด
 ข้อ ที่   1
    • ทดลองเขีย นโปรแกรมจัด การเหตุก ารณ์เ พื่อ ทำา ให้
     โปรแกรม GUI ในแบบฝึก หัด บทที่ 6 ให้ส ามารถทำา งาน
     ได้อ ย่า งถูก ต้อ ง

More Related Content

What's hot (20)

โครงงานแผ่นซับเสียงจากเส้นใยธรรมชาติ
โครงงานแผ่นซับเสียงจากเส้นใยธรรมชาติ
beauntp
 
G biology bio5
G biology bio5
Bios Logos
 
ใบความรู้ Powerpoint 2010
ใบความรู้ Powerpoint 2010
สุดรัก หวานใจ
 
เฉลย O-net คณิตศาสตร์ 54
เฉลย O-net คณิตศาสตร์ 54
อนุชิต ไชยชมพู
 
ราก (T)
ราก (T)
Thitaree Samphao
 
บทที่ 5 สรุปผล
บทที่ 5 สรุปผล
Guntima NaLove
 
ปัจจัยที่มีผลต่อภาวะสมดุล
ปัจจัยที่มีผลต่อภาวะสมดุล
Manchai
 
การค้นพบสารพันธุกรรม
การค้นพบสารพันธุกรรม
Sawaluk Teasakul
 
บทที่ 2 ปฏิกิริยาเคมี
บทที่ 2 ปฏิกิริยาเคมี
Jariya Jaiyot
 
หน่วยการเรียนรู้ที่ 1 เรื่องทศนิยมและเศษส่วน
หน่วยการเรียนรู้ที่ 1 เรื่องทศนิยมและเศษส่วน
Inmylove Nupad
 
โครงงานคณิตศาสตร์ (1)
โครงงานคณิตศาสตร์ (1)
Nomjeab Nook
 
สรุปสูตรคณิตศาสตร์ ม.ปลาย (ม.4-6) ชุด 1
สรุปสูตรคณิตศาสตร์ ม.ปลาย (ม.4-6) ชุด 1
อนุชิต ไชยชมพู
 
2.1การวิเคราะห์และนำเสนอข้อมูลเชิงคุณภาพด้วยตารางความถี่
2.1การวิเคราะห์และนำเสนอข้อมูลเชิงคุณภาพด้วยตารางความถี่
Somporn Amornwech
 
7แบบทดสอบการรักษาดุลยภาพของน้ำและแร่ธาตุ
7แบบทดสอบการรักษาดุลยภาพของน้ำและแร่ธาตุ
สำเร็จ นางสีคุณ
 
แบบทดสอบหน่วยที่ 1 กรณฑ์ที่สอง
แบบทดสอบหน่วยที่ 1 กรณฑ์ที่สอง
Sathuta luamsai
 
โครงงานแผ่นซับเสียงจากเส้นใยธรรมชาติ
โครงงานแผ่นซับเสียงจากเส้นใยธรรมชาติ
beauntp
 
G biology bio5
G biology bio5
Bios Logos
 
บทที่ 5 สรุปผล
บทที่ 5 สรุปผล
Guntima NaLove
 
ปัจจัยที่มีผลต่อภาวะสมดุล
ปัจจัยที่มีผลต่อภาวะสมดุล
Manchai
 
การค้นพบสารพันธุกรรม
การค้นพบสารพันธุกรรม
Sawaluk Teasakul
 
บทที่ 2 ปฏิกิริยาเคมี
บทที่ 2 ปฏิกิริยาเคมี
Jariya Jaiyot
 
หน่วยการเรียนรู้ที่ 1 เรื่องทศนิยมและเศษส่วน
หน่วยการเรียนรู้ที่ 1 เรื่องทศนิยมและเศษส่วน
Inmylove Nupad
 
โครงงานคณิตศาสตร์ (1)
โครงงานคณิตศาสตร์ (1)
Nomjeab Nook
 
สรุปสูตรคณิตศาสตร์ ม.ปลาย (ม.4-6) ชุด 1
สรุปสูตรคณิตศาสตร์ ม.ปลาย (ม.4-6) ชุด 1
อนุชิต ไชยชมพู
 
2.1การวิเคราะห์และนำเสนอข้อมูลเชิงคุณภาพด้วยตารางความถี่
2.1การวิเคราะห์และนำเสนอข้อมูลเชิงคุณภาพด้วยตารางความถี่
Somporn Amornwech
 
7แบบทดสอบการรักษาดุลยภาพของน้ำและแร่ธาตุ
7แบบทดสอบการรักษาดุลยภาพของน้ำและแร่ธาตุ
สำเร็จ นางสีคุณ
 
แบบทดสอบหน่วยที่ 1 กรณฑ์ที่สอง
แบบทดสอบหน่วยที่ 1 กรณฑ์ที่สอง
Sathuta luamsai
 

Similar to ๋Java Programming [7/12] : GUI Event Handling (20)

Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Thanachart Numnonda
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Thanachart Numnonda
 
Java Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented Concept
IMC Institute
 
Java-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and Objects
Wongyos Keardsri
 
Chapter1 uml3
Chapter1 uml3
Mittapan Chantanyakan
 
บทที่ 13 การดักจับเ
บทที่ 13 การดักจับเ
Theeravaj Tum
 
Java Programming: หลักการเชิงอ็อบเจกต์
Java Programming: หลักการเชิงอ็อบเจกต์
Thanachart Numnonda
 
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Thanachart Numnonda
 
Basic Event Listener
Basic Event Listener
kunemata
 
Uj1udqos8e6ljrab9nis9vott3
Uj1udqos8e6ljrab9nis9vott3
tuylove
 
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and Objects
Wongyos Keardsri
 
หลักการเขียนโปรแกรม
หลักการเขียนโปรแกรม
ณัฐพล บัวพันธ์
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Tua Tor
 
Flex 101 ep-03
Flex 101 ep-03
N3A Media Limited Partnership
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
Aeew Autaporn
 
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Thanachart Numnonda
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Thanachart Numnonda
 
Java Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented Concept
IMC Institute
 
Java-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and Objects
Wongyos Keardsri
 
บทที่ 13 การดักจับเ
บทที่ 13 การดักจับเ
Theeravaj Tum
 
Java Programming: หลักการเชิงอ็อบเจกต์
Java Programming: หลักการเชิงอ็อบเจกต์
Thanachart Numnonda
 
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Thanachart Numnonda
 
Basic Event Listener
Basic Event Listener
kunemata
 
Uj1udqos8e6ljrab9nis9vott3
Uj1udqos8e6ljrab9nis9vott3
tuylove
 
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and Objects
Wongyos Keardsri
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Tua Tor
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
Aeew Autaporn
 
Ad

More from IMC Institute (20)

นิตยสาร Digital Trends ฉบับที่ 14
นิตยสาร Digital Trends ฉบับที่ 14
IMC Institute
 
Digital trends Vol 4 No. 13 Sep-Dec 2019
Digital trends Vol 4 No. 13 Sep-Dec 2019
IMC Institute
 
บทความ The evolution of AI
บทความ The evolution of AI
IMC Institute
 
IT Trends eMagazine Vol 4. No.12
IT Trends eMagazine Vol 4. No.12
IMC Institute
 
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
IMC Institute
 
IT Trends 2019: Putting Digital Transformation to Work
IT Trends 2019: Putting Digital Transformation to Work
IMC Institute
 
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
IMC Institute
 
IT Trends eMagazine Vol 4. No.11
IT Trends eMagazine Vol 4. No.11
IMC Institute
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformation
IMC Institute
 
บทความ The New Silicon Valley
บทความ The New Silicon Valley
IMC Institute
 
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
IMC Institute
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformation
IMC Institute
 
The Power of Big Data for a new economy (Sample)
The Power of Big Data for a new economy (Sample)
IMC Institute
 
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
IMC Institute
 
IT Trends eMagazine Vol 3. No.9
IT Trends eMagazine Vol 3. No.9
IMC Institute
 
Thailand software & software market survey 2016
Thailand software & software market survey 2016
IMC Institute
 
Developing Business Blockchain Applications on Hyperledger
Developing Business Blockchain Applications on Hyperledger
IMC Institute
 
Digital transformation @thanachart.org
Digital transformation @thanachart.org
IMC Institute
 
บทความ Big Data จากบล็อก thanachart.org
บทความ Big Data จากบล็อก thanachart.org
IMC Institute
 
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
IMC Institute
 
นิตยสาร Digital Trends ฉบับที่ 14
นิตยสาร Digital Trends ฉบับที่ 14
IMC Institute
 
Digital trends Vol 4 No. 13 Sep-Dec 2019
Digital trends Vol 4 No. 13 Sep-Dec 2019
IMC Institute
 
บทความ The evolution of AI
บทความ The evolution of AI
IMC Institute
 
IT Trends eMagazine Vol 4. No.12
IT Trends eMagazine Vol 4. No.12
IMC Institute
 
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
IMC Institute
 
IT Trends 2019: Putting Digital Transformation to Work
IT Trends 2019: Putting Digital Transformation to Work
IMC Institute
 
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
IMC Institute
 
IT Trends eMagazine Vol 4. No.11
IT Trends eMagazine Vol 4. No.11
IMC Institute
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformation
IMC Institute
 
บทความ The New Silicon Valley
บทความ The New Silicon Valley
IMC Institute
 
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
IMC Institute
 
แนวทางการทำ Digital transformation
แนวทางการทำ Digital transformation
IMC Institute
 
The Power of Big Data for a new economy (Sample)
The Power of Big Data for a new economy (Sample)
IMC Institute
 
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
IMC Institute
 
IT Trends eMagazine Vol 3. No.9
IT Trends eMagazine Vol 3. No.9
IMC Institute
 
Thailand software & software market survey 2016
Thailand software & software market survey 2016
IMC Institute
 
Developing Business Blockchain Applications on Hyperledger
Developing Business Blockchain Applications on Hyperledger
IMC Institute
 
Digital transformation @thanachart.org
Digital transformation @thanachart.org
IMC Institute
 
บทความ Big Data จากบล็อก thanachart.org
บทความ Big Data จากบล็อก thanachart.org
IMC Institute
 
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
IMC Institute
 
Ad

๋Java Programming [7/12] : GUI Event Handling

  • 1. บทที่ 7 การจัด การกับ เหตุก ารณ์ กราฟฟิก (GUI Event Handling) อ.ธนิศ า เครือ ไวศยวรรณ คณะเทคโนโลยีส ารสนเทศ สถาบัน เทคโนโลยีพ ระจอมเกล้า เจ้า
  • 2. วัต ถุป ระสงค์  นิย ามความหมายของเหตุก ารณ์  แนะนำา คลาสประเภท Event ทีเ กีย วข้อ งกับ ่ ่ เหตุก ารณ์ก ราฟฟิก ต่า งๆ  แนะนำา อิน เตอร์เ ฟสประเภท Listener ทีใ ช้ใ นการ ่ รับ ฟัง เหตุก ารณ์  อธิบ ายวิธ ีก ารสร้า งออปเจ็ค ของคลาสประเภท Event Handler  อธิบ ายวิธ ีก ารจัด การกับ เหตุก ารณ์ก ราฟฟิก หลายๆเหตุก ารณ์  แนะนำา คลาสประเภท Event Adapter
  • 3. เหตุก ารณ์  เหตุก ารณ์ (Event) เป็น สถานการณ์ท เ กิด ขึ้น ใน ี่ ขณะรัน โปรแกรม อาทิเ ช่น การใช้อ ิน พุต (เมาส์ หรือ คีย บ อร์ด ) ติด ต่อ กับ โปรแกรม GUI ์  การเกิด เหตุก ารณ์ใ นโปรแกรมภาษาจาวาจะ เป็น การสร้า งออปเจ็ค ของคลาสประเภท Event ชนิด ต่า งๆขึ้น มาตามประเภทของเหตุก ารณ์ อาทิ เช่น • เมื่อ เลื่อ นเมาส์ใ นเฟรมจะเกิด ออปเจ็ค ของคลาส MouseEvent ขึ้น มา • เมื่อ ปิด เฟรมจะเกิด ออปเจ็ค ของคลาส WindowEvent ขึ้น มา • เมื่อ กดปุ่ม ที่อ ยู่ใ นเฟรมจะเกิด ออปเจ็ค ของคลาส ActionEvent ขึ้น มา
  • 4. คลาสประเภท Event  ออปเจ็ค ของคลาสประเภท Event ทีเ กิด ขึ้น จะแตก ่ ต่า งกัน ตามประเภทของเหตุก ารณ์  คลาสประเภท Event ในภาษาจาวาจะสืบ ทอดจาก คลาสทีชื่อ EventObject ่  คลาสประเภท Event สำา หรับ เหตุก ารณ์ท าง กราฟฟิก จะสืบ ทอดจากคลาส AWTEvent  คลาสประเภท Event สำา หรับ เหตุก ารณ์ท าง กราฟฟิก จะอยู่ใ นแพคเก็จ java.awt.event
  • 5. คลาสประเภท Event สำา หรับ เหตุก ารณ์ก ราฟฟิก
  • 6. องค์ป ระกอบของ Event  Event คือ ออปเจ็ค ตามประเภทของเหตุก ารณ์  Event Source คือ ส่ว นทีท ำา ให้เ กิด เหตุก ารณ์ ่  Event Handler คือ ออปเจ็ค ที่จ ะทำา หน้า ทีจ ัด การ ่ กับ เหตุก ารณ์ท เ กิด ขึ้น โดยมีเ มธอดทีจ ะรับ ออปเจ็ ี่ ่ คชนิด Event ดัง กล่า วและมีค ำา สัง ในการจัด การกับ ่ เหตุก ารณ์เ พือ โต้ต อบกับ ผู้ใ ช้ ่
  • 7. AWTEvent  คลาส AWTEvent เป็น superclass ของคลาส ประเภท Event สำา หรับ เหตุก ารณ์ท างด้า นกราฟฟิก ซึ่ง จะมีอ ยูท ง หมด 11 คลาสคือ ActionEvent, ่ ั้ AdjustmentEvent, ComponentEvent, ItemEvent, TextEvent, FocusEvent, WindowEvent, InputEvent, ContainerEvent, KeyEvent และ MouseEvent  คลาส AWTEvent และคลาส ObjectEvent มีเ มธอดที่ สำา คัญ ดัง นี้ • Object getSource() เพื่อ เรีย กดูอ อปเจ็ค ประเภท Event Source • int getID() เพื่อ ระบุช นิด ของเหตุก ารณ์
  • 8. ActionEvent  จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน ี่ ี โปรแกรม GUI ดัง นี้ • เมื่อ มีก ารคลิก เมาส์บ นปุ่ม (Button) • เมื่อ มีก ารป้อ นคีย ์ Enter ใน TextField • เมื่อ มีก ารเลือ กเมนูใ น MenuItem • เมื่อ มีก ารกด double click ใน List  เมธอดทีส ำา คัญ ของคลาส ActionEvent ่ มีด ัง นี้ • String getActionCommand() จะส่ง ชื่อ คำา สั่ง ที่เ กิด ขึ้น จาก ActionEvent • int getModifier() จะส่ง สถานะของคีย ์ Modifier (คีย ์ Alt, Ctrl, Meta และ Shift) ที่เ กิด ขึ้น จากออปเจ็ค ของ คลาส ActionEvent
  • 9. WindowEvent  จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น เป็น ี่ ี ออปเจ็ค ของคลาสประเภท Window มีร ูป แบบต่า งๆ ดัง นี้ • opened • closed • closing • iconified • deiconified • activated • deactivated  เมธอดทีส ำา คัญ ของคลาส WindowEvent ่ มีด ัง นี้ • Object getWindow() จะส่ง ออปเจ็ค ที่เ ป็น Event Source ชนิด Window คืน มา
  • 10. MouseEvent  จะถูก สร้า งขึ้น ในกรณีท ม ก ารใช้ง านเมาส์เ พือ ี่ ี ่ ติด ต่อ กับ ผู้ใ ช้โ ดยมีเ หตุก ารณ์ท เ กิด ขึ้น ได้ด ัง นี้ ี่ • dragged • moved • clicked • entered • exited • pressed • released
  • 11. MouseEvent  เมธอดทีส ำา คัญ ของคลาส MouseEvent ่ มีด ัง นี้ • int getX() จะส่ง ตำา แหน่ง พิก ัด ของเมาส์แ กน X ที่ม ีช นิด ข้อ มูล เป็น int คืน มา • int getY() จะส่ง ตำา แหน่ง พิก ัด ของเมาส์แ กน Y ที่ม ีช นิด ข้อ มูล เป็น int คืน มา • Point getPoint() จะส่ง ตำา แหน่ง พิก ัด (x,y) ของเมาส์ค ืน มา โดยมีช นิด ข้อ มูล เป็น ออปเจ็ค ของคลาส Point • int getClickCount() จะส่ง จำา นวนครั้ง ของการ คลิก เมาส์ คืน มา
  • 12. ItemEvent  จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน ี่ ี โปรแกรม GUI ดัง นี้ • เมื่อ มีก ารเลือ กหรือ ยกเลิก รายการใน List หรือ Checkbox • เมื่อ มีก ารคลิก เมาส์ร ายการใน Choice  เมธอดทีส ำา คัญ ของคลาส ่ ItemEvent มีด ัง นี้ • ItemSelectable getItemSelectable() จะส่ง ออปเจ็ค ของ คลาสประเภท ItemSelectable ที่เ ป็น Event Source คืน มา • Object getItem() จะส่ง ออปเจ็ค ของรายการที่ถ ูก เลือ ก คืน มา • int getStateChange() จะส่ง ค่า คงที่ช นิด int ที่ม ีค ่า เป็น SELECTED หรือ DESELECTED เพื่อ ระบุส ถานการณ์เ ลือ กของรายการคืน มา
  • 13. Event อื่น ๆ  KeyEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี ่ ี ่ เหตุก ารณ์ก ารกดคีย บ อร์ด ์  FocusEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ ผู้ใ ช้ ่ ี ่ เลื่อ นอุป กรณ์อ ิน พุต มาชี้ย ง ออปเจ็ค ของส่ว น ั ประกอบกราฟฟิก ใดๆ  ComponentEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี ่ ี ่ เหตุก ารณ์ซ งึ่ ออปเจ็ค ของส่ว นประกอบกราฟฟิก มีก าร เปลี่ย นแปลงเช่น เคลื่อ นทีห รือ ปรับ ขนาด ่  ContainerEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ ่ ี ่ มีเ หตุก ารณ์ใ นการใส่ห รือ ยกเลิก ออปเจ็ค ของส่ว น ประกอบกราฟฟิก ลงในออปเจ็ค ของคลาสประเภท
  • 14. Event อื่น ๆ  AdjustmentEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ ่ ี ่ มีเ หตุก ารณ์ใ นการปรับ ตำา แหน่ง ชี้ข องออปเจ็ค ของคลาส ScrollBar หรือ ScrollPane  TextEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี ่ ี ่ เหตุก ารณ์ใ นการเปลี่ย นแปลงข้อ ความในออปเจ็ค ของคลาส TextArea
  • 15. อิน เตอร์เ ฟสประเภท Listener  ภาษาจาวาจะจัด การกับ เหตุก ารณ์โ ดยการสร้า ง ออปเจ็ค ทีส ามารถรับ ฟัง เหตุก ารณ์จ ากคลาสที่ ่ implements อิน เตอร์เ ฟสประเภท Listener ที่ สอดคล้อ งกัน  ออปเจ็ค นีจ ะทำา หน้า ที่เ ป็น ้ Event Handler  อาทิเ ช่น ออปเจ็ค ทีจ ะจัด การกับ เหตุก ารณ์ป ระเภท ่ ActionEvent จะต้อ ง implements อิน เตอร์เ ฟส ActionListener
  • 16. อิน เตอร์เ ฟสประเภท Listener  ActionListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส ActionEvent  AdjustmentListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของคลาส AdjustmentEvent  ComponentListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของคลาส ComponentEvent  ContainerListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของคลาส ContainerEvent  FocusListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส FocusEvent
  • 17. อิน เตอร์เ ฟสประเภท Listener  ItemListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส ItemEvent  KeyListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส KeyEvent  MouseListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส MouseEvent  MouseMotionListener เป็น อิน เตอร์เ ฟสสำา หรับ ออป เจ็ค ของคลาส MouseEvent
  • 18. เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์ ่ เมธอดทีใ ช้ร ับ ฟัง ่ อิน เตอร์เ ฟส เหตุก ารณ์ ActionListener addActionListener() ItemListener addItemListener() KeyListener addKeyListener() MouseListener addMouseListener() MouseMotionListener addMouseMotionListener() TextListener addTextListener() FocusListener addFocusListener() AdjustmentListener addAdjustmentListener()
  • 19. เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์ ่ เมธอดทีใ ช้ร ับ ฟัง ่ อิน เตอร์เ ฟส เหตุก ารณ์ ComponentListener addComponentListener() ContainerListener addContainerListener() WindowListener addWindowListener()
  • 20. เมธอดที่ต ้อ งลงทะเบีย นเมื่อ ต้อ งการ จัด การกับ เหตุก ารณ์ อิน เตอร์เ ฟส เมธอดทีต ้อ ง ่ implements keyPressed(KeyEvent) KeyListener keyReleased(KeyEvent) keyTyped(KeyEvent) focusGained(FocusEvent) FocusListener focusLost(FocusEvent) adjustmentValueChanged AdjustmentListener (AdjustmentEvent) componentMoved(ComponentEvent) componentHidden(ComponentEvent) ComponentListener componentResized(ComponentEvent) componentShown(ComponentEvent)
  • 21. เมธอดที่ต ้อ ง implements อิน เตอร์เ ฟส เมธอดทีต ้อ ง ่ implements ActionListener actionPerformed(ActionEvent) ItemListener itemStateChanged(ItemEvent) mouseClicked(MouseEvent) mouseEntered(MouseEvent) MouseListener mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseMoved(MouseEvent) MouseMotionListener mouseDragged(MouseEvent)
  • 22. เมธอดที่ต ้อ ง implements อิน เตอร์เ ฟส เมธอดทีต ้อ ง ่ implements keyPressed(KeyEvent) KeyListener keyReleased(KeyEvent) keyTyped(KeyEvent) focusGained(FocusEvent) FocusListener focusLost(FocusEvent) adjustmentValueChanged AdjustmentListener (AdjustmentEvent) componentMoved(ComponentEvent) componentHidden(ComponentEvent) ComponentListener componentResized(ComponentEvent) componentShown(ComponentEvent)
  • 23. เมธอดที่ต ้อ ง implements อิน เตอร์เ ฟส เมธอดทีต ้อ ง ่ implements windowOpened(WindowEvent) windowClosed(WindowEvent) windowClosing(WindowEvent) WindowListener windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) componentAdded(ContainerEvent) ContainerListener componentRemoved(ContainerEvent) TextListener textValueChanged(TextEvent)
  • 24. การจัด การกับ เหตุก ารณ์  ภาษาจาวาจะมีว ิธ ีก ารจัด การกับ เหตุก ารณ์ท เ รีย ก ี่ ว่า Delegation Model โดยจะมีห ลัก การดัง นี้ • ออปเจ็ค ของส่ว นประกอบกราฟฟิก ใดๆสามารถเป็น ออปเจ็ค ประเภท Event Source ได้ อาทิเ ช่น ออปเจ็ค ของคลาส Button สามารถเป็น Event Source ของ ActionEvent ได้ • คลาสใดๆสามารถรับ ฟัง เหตุก ารณ์ใ ดๆก็ไ ด้ ถ้า คลาสนั้น implements อิน เตอร์เ ฟสประเภท Listener ที่ส อดคล้อ งกัน อาทิเ ช่น คลาสที่ต ้อ งการรับ ฟัง เหตุก ารณ์ ActionEvent จะต้อ ง implements อิน เตอร์เ ฟสที่ช ื่อ ActionListener • ออปเจ็ค ประเภท Event ที่เ กิด จาก Event Source จะถูก ส่ง ไปยัง ออปเจ็ค ของคลาสที่ส ามารถรับ ฟัง เหตุก ารณ์ ประเภทนั้น
  • 25. ออปเจ็ค ของคลาสประเภท Event Handler  Event Source ใดต้อ งการทีจ ะจัด การกับ ่ เหตุก ารณ์ใ ดต้อ งลงทะเบีย นเพื่อ รับ ฟัง เหตุก ารณ์ โดยมีร ูป แบบดัง นี้ eventSource.addXxxListener(listener)  เราสามารถสร้า งออปเจ็ค ของคลาสประเภท Event Handler ได้ห ลายรูป แบบดัง นี้ • กำา หนดคลาสภายนอกคลาสที่ใ ช้ใ นการจัด การ เหตุก ารณ์ • กำา หนดคลาสที่เ ป็น คลาสภายในอยู่ใ นคลาสที่ใ ช้ใ นการ จัด การเหตุก ารณ์ • กำา หนดให้ค ลาสที่ใ ช้ใ นการจัด การเหตุก ารณ์ implements อิน เตอร์เ ฟสประเภท Listener ที่ส อดคล้อ งกัน และสร้า งออปเจ็ค ของคลาสดัง กล่า วภายในคลาสเอง • กำา หนดคลาสภายในเมธอด (คลาสประเภท
  • 26. ตัว อย่า งโปรแกรม import java.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.event.*; public class EventDemo1 {{ public class EventDemo1 public static void main(String args[]) {{ public static void main(String args[]) Frame fr == new Frame("Event Demo"); Frame fr new Frame("Event Demo"); Button bn1 == new Button("Exit"); Button bn1 new Button("Exit"); fr.setLayout(new FlowLayout()); fr.setLayout(new FlowLayout()); bn1.addActionListener(new ActionHandler()); bn1.addActionListener(new ActionHandler()); fr.add(bn1); fr.add(bn1); fr.setSize(200,200); fr.setSize(200,200); ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแก ี่ fr.setVisible(true); fr.setVisible(true); }} }} public class ActionHandler implements ActionListener {{ public class ActionHandler implements ActionListener public void actionPerformed(ActionEvent ev) {{ public void actionPerformed(ActionEvent ev) System.exit(0); System.exit(0); }} }}
  • 27. คำา อธิบ ายโปรแกรม  คลาส EventDemo1 มีป ุ่ม ที่ช อ bn1 ซึ่ง ลงทะเบีย นรับ ฟัง ื่ เหตุก ารณ์ป ระเภท ActionEvent จากคำา สั่ง bn1.addActionListener(new ActionHandler());  คำา สั่ง new ActionHandler()เป็น การสร้า งออปเจ็ค ทีใ ช้ ่ ในการจัด การกับ เหตุก ารณ์ป ระเภท ActionEvent  คลาส ActionHandler จะต้อ ง implements อิน เตอร์เ ฟส ชื่อ ActionListener  เมธอดทีต ้อ ง implements ่ ในคลาสคือ public void actionPerformed(ActionEvent ev)
  • 28. ตัว อย่า งโปรแกรม import java.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.event.*; public class EventDemo2 {{ public class EventDemo2 private Frame fr; private Frame fr; private TextField tf; private TextField tf; public EventDemo2() {{ public EventDemo2() fr == new Frame("Event Demo"); fr new Frame("Event Demo"); tf == new TextField(15); tf new TextField(15); fr.setLayout(new FlowLayout()); fr.setLayout(new FlowLayout()); fr.add(tf); fr.add(tf); fr.setFont(new Font("TimesRoman",Font.BOLD,16)); fr.setFont(new Font("TimesRoman",Font.BOLD,16)); fr.addMouseMotionListener(new MouseHandler()); fr.addMouseMotionListener(new MouseHandler()); fr.setSize(200,200); fr.setSize(200,200); fr.setVisible(true); fr.setVisible(true); }} public class MouseHandler implements MouseMotionListener {{ public class MouseHandler implements MouseMotionListener
  • 29. ตัว อย่า งโปรแกรม public void mouseDragged(MouseEvent ev) {{ public void mouseDragged(MouseEvent ev) tf.setText("X="+ev.getX()+" Y="+ev.getY()); tf.setText("X="+ev.getX()+" Y="+ev.getY()); }} public void mouseMoved(MouseEvent ev) {{ }} public void mouseMoved(MouseEvent ev) }} public static void main(String args[]) {{ public static void main(String args[]) EventDemo2 obj == new EventDemo2(); EventDemo2 obj new EventDemo2(); }} }} ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม ี่
  • 30. คำา อธิบ ายโปรแกรม  ตัว อย่า งโปรแกรม EventDemo2 มีก ารขึ้น ทะ เบีย นออปเจ็ค ของคลาส Frame เพือ รับ ฟัง ่ เหตุก ารณ์ MouseEvent จากคำา สั่ง fr.addMouseMotionListener(new MouseHandler());  โปรแกรมนี้จ ะแสดงตำา แหน่ง ของเมาส์เ มือ มีก าร ่ เลื่อ นเมาส์  คลาส MouseHandler เป็น คลาสภายใน ทำา ให้ สามารถเรีย กใช้ค ุณ ลัก ษณะของคลาส EventDemo2 ไ ด้ เช่น ออปเจ็ค tf ของคลาส TextField
  • 31. ตัว อย่า งแสดงการสร้า งออปเจ็ค ภายในคลาสเดีย วกัน import java.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.event.*; public class EventDemo3 implements WindowListener{ public class EventDemo3 implements WindowListener{ public static void main(String args[]) {{ public static void main(String args[]) EventDemo3 obj == new EventDemo3(); EventDemo3 obj new EventDemo3(); obj.init(); obj.init(); }} public void init() {{ public void init() Frame fr == new Frame("Event Demo"); Frame fr new Frame("Event Demo"); fr.addWindowListener(this); fr.addWindowListener(this); fr.add(bn1); fr.add(bn1); fr.setSize(200,200); fr.setSize(200,200); fr.setVisible(true); fr.setVisible(true); }} public void windowClosing(WindowEvent ev) {{ public void windowClosing(WindowEvent ev) System.exit(0); System.exit(0); }}
  • 32. ตัว อย่า งแสดงการสร้า งออปเจ็ค ภายในคลาสเดีย วกัน public void windowOpened(WindowEvent ev) {{ }} public void windowOpened(WindowEvent ev) public void windowClosed(WindowEvent ev) {{ }} public void windowClosed(WindowEvent ev) public void windowIconified(WindowEvent ev) {{ }} public void windowIconified(WindowEvent ev) public void windowDeiconified(WindowEvent ev) {{ }} public void windowDeiconified(WindowEvent ev) public void windowActivated(WindowEvent ev) {{ }} public void windowActivated(WindowEvent ev) public void windowDeactivated(WindowEvent ev) {{ }} public void windowDeactivated(WindowEvent ev) }} ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม ี่
  • 33. คำา อธิบ ายโปรแกรม  this หมายถึง ออปเจ็ค ของคลาสเดีย วกัน  ตัว อย่า งโปรแกรมใช้อ อปเจ็ค this ในการจัด การ กับ WindowEvent จากคำา สั่ง fr.addWindowListener(this);  คลาส EventDemo3 ต้อ ง implements อิน เตอร์เ ฟส WindowListener  คำา สั่ง System.exit(0); ใน เมธอด windowClosing()ทำา ให้ส ามารถออกจากโปรแกรมได้ โดยการคลิก เมาส์ท เ ครื่อ งหมายกากบาทตรง ี่ Title Bar
  • 34. การรับ ฟัง เหตุก ารณ์ห ลาย เหตุก ารณ์  Event Source สามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง ่ เหตุก ารณ์ห ลายประเภทได้ เช่น • fr.addMouseMotionListener(this); • fr.addWindowListener(this);  คลาสใดๆสามารถ implements อิน เตอร์เ ฟสหลาย ตัว ได้ เช่น • public class EventDemo4 implements MouseMotionListener, WindowListener  EventHandler สามารถทีจ ะจัด การกับ Event ่ Source ได้ห ลายตัว และ ออปเจ็ค ของคลาส ประเภท Event จะมีเ มธอดในการทีจ ะแยก Event ่ Source ได้
  • 35. ตัว อย่า งโปรแกรม import java.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.event.*; public class EventDemo4 implements MouseMotionListener, public class EventDemo4 implements MouseMotionListener, WindowListener {{ WindowListener private Frame fr; private Frame fr; private TextField tf; private TextField tf; public EventDemo4() {{ public EventDemo4() fr == new Frame("Event Demo"); fr new Frame("Event Demo"); tf == new TextField(15); tf new TextField(15); fr.setLayout(new FlowLayout()); fr.setLayout(new FlowLayout()); fr.add(tf); fr.add(tf); fr.setFont(new Font("TimesRoman",Font.BOLD,16)); fr.setFont(new Font("TimesRoman",Font.BOLD,16)); fr.addMouseMotionListener(this); fr.addMouseMotionListener(this); fr.addWindowListener(this); fr.addWindowListener(this); fr.setSize(200,200); fr.setSize(200,200); fr.setVisible(true); fr.setVisible(true); }}
  • 36. ตัว อย่า งโปรแกรม public static void main(String args[]) {{ public static void main(String args[]) EventDemo4 obj == new EventDemo4(); EventDemo4 obj new EventDemo4(); }} public void mouseDragged(MouseEvent ev) {{ public void mouseDragged(MouseEvent ev) tf.setText("X="+ev.getX()+" Y="+ev.getY()); tf.setText("X="+ev.getX()+" Y="+ev.getY()); }} public void mouseMoved(MouseEvent ev) {{ }} public void mouseMoved(MouseEvent ev) public void windowClosing(WindowEvent ev) {{ public void windowClosing(WindowEvent ev) System.exit(0); ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแ ี่ System.exit(0); }} public void windowOpened(WindowEvent ev) {{ }} public void windowOpened(WindowEvent ev) public void windowClosed(WindowEvent ev) {{ }} public void windowClosed(WindowEvent ev) public void windowIconified(WindowEvent ev) {{ }} public void windowIconified(WindowEvent ev) public void windowDeiconified(WindowEvent ev) {{ }} public void windowDeiconified(WindowEvent ev) public void windowActivated(WindowEvent ev) {{ }} public void windowActivated(WindowEvent ev) public void windowDeactivated(WindowEvent ev) {{ }} public void windowDeactivated(WindowEvent ev) }}
  • 37. คลาสประเภท Event Adapter  คลาสประเภท Event Adapter คือ คลาสที่ไ ด้ implements อิน เตอร์เ ฟส ประเภท Listener ไว้แ ล้ว  คลาสประเภท Event Adapter นัน ได้ก ำา หนด ้ เมธอดต่า งๆของอิน เตอร์เ ฟสทีต ้อ งเขีย น ไว้แ ล้ว ่ แต่จ ะเป็น บล็อ กคำา สัง ทีไ ม่ม ค ำา สัง ใดๆอยูภ ายใน ่ ่ ี ่ ่ บล็อ ก  คลาสประเภท Event Adapter จะช่ว ยทำา ให้เ ขีย น โปรแกรมทีเ ป็น คลาส ประเภท Event Handler ได้ ่ ง่า ยขึ้น โดยลดจำา นวนเมธอดทีจ ะต้อ งเขีย นบล็อ ก ่ คำา สั่ง
  • 38. คลาสประเภท Event Adapter  คลาสประเภท Event Adapter มีด ัง นี้ • MouseAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ MouseListener • MouseMotionAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ ชื่อ MouseMotionListener • ComponentAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ ชื่อ ComponentListener • ContainerAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ ชื่อ ContainerListener • KeyAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ KeyListener • WindowAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ WindowListener • FocusAdapter คือ คลาสที่ implements อิน เตอร์เ ฟสที่ช ื่อ FocusListener
  • 39. ตัว อย่า งโปรแกรม import java.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.event.*; public class EventDemo5 {{ public class EventDemo5 public static void main(String args[]) {{ public static void main(String args[]) Frame fr == new Frame("Event Demo"); Frame fr new Frame("Event Demo"); fr.addWindowListener(new WindowHandler()); fr.addWindowListener(new WindowHandler()); fr.setSize(200,200); fr.setSize(200,200); fr.setVisible(true); fr.setVisible(true); }} }} public class WindowHandler extends WindowAdapter {{ public class WindowHandler extends WindowAdapter public void windowClosing(WindowEvent ev) {{ public void windowClosing(WindowEvent ev) System.exit(0); System.exit(0); }} }}
  • 40. การสร้า งคลาสแบบ anonymous  เราสามารถกำา หนดคลาสทัง หมดให้อ ยู่ภ ายใน ้ เมธอดทีเ รีย กใช้ง าน ่  คลาสประเภทนีเ รีย กว่า คลาสประเภท ้ anonymous  คลาสประเภท anonymous นิย มใช้ใ นการ จัด การ กับ Event เช่น การปิด Frame
  • 41. ตัว อย่า งโปรแกรม import java.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.event.*; public class EventDemo6 {{ public class EventDemo6 public static void main(String args[]) {{ public static void main(String args[]) Frame fr == new Frame("Event Demo"); Frame fr new Frame("Event Demo"); fr.addWindowListener(new WindowAdapter() {{ fr.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent ev) {{ public void windowClosing(WindowEvent ev) System.exit(0); System.exit(0); }} }); }); fr.setSize(200,200); fr.setSize(200,200); fr.setVisible(true); fr.setVisible(true); }} }}
  • 42. สรุป เนื้อ หาของบท  ออปเจ็ค ของคลาสประเภท Event ในแพจเก็จ java.awt.event จะถูก สร้า งขึ้น เมือ มีก ารกระทำา บาง ่ อย่า งเกิด ขึ้น กับ ตัว ใส่ส ว นประกอบหรือ ส่ว น ่ ประกอบกราฟฟิก เช่น ActionEvent เกิด ขึ้น เมือ มี ่ การกด Button หรือ WindowEvent เกิด ขึ้น เมือ มีก ารปิด ่ Frame  การจะจัด การกับ Event ประเภทใดนัน โดยทัว ไป ้ ่ จะต้อ งสร้า งออปเจ็ค ของคลาสที่ implements อิน เตอร์เ ฟสทีส อดคล้อ งกัน กับ Event นัน ด้ว ย เช่น ่ ้ ถ้า ต้อ งการจัด การกับ WindowEvent จะต้อ งสร้า งออป เจ็ค ของคลาสที่ implements อิน เตอร์เ ฟส WindowListener โดยการสร้า งออปเจ็ค อาจสร้า งจาก คลาสภายนอก คลาสภายใน คลาสเดีย วกัน หรือ
  • 43. สรุป เนื้อ หาของบท  คลาสใดๆสามารถ implements อิน เตอร์เ ฟสได้ห ลาย ตัว ทำา ให้ส ามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง เหตุก ารณ์ ่ ได้ห ลายเหตุก ารณ์  คลาสประเภท Event Adapter คือ คลาสที่ไ ด้ implements อิน เตอร์เ ฟส ประเภท Listener ไว้แ ล้ว โดยได้ก ำา หนดเมธอดต่า งๆของอิน เตอร์เ ฟสทีต ้อ ง ่ เขีย น ไว้แ ล้ว แต่จ ะเป็น บล็อ กคำา สั่ง ทีไ ม่ม ค ำา สั่ง ใดๆ ่ ี อยูภ ายในบล็อ ก ่
  • 44. แบบฝึก หัด  ข้อ ที่ 1 • ทดลองเขีย นโปรแกรมจัด การเหตุก ารณ์เ พื่อ ทำา ให้ โปรแกรม GUI ในแบบฝึก หัด บทที่ 6 ให้ส ามารถทำา งาน ได้อ ย่า งถูก ต้อ ง