SlideShare ist ein Scribd-Unternehmen logo
1 von 44
บทที่ 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 ให้ส ามารถทำา งาน
     ได้อ ย่า งถูก ต้อ ง

Weitere ähnliche Inhalte

Was ist angesagt?

เอกสารแคลคูลัส
เอกสารแคลคูลัสเอกสารแคลคูลัส
เอกสารแคลคูลัสkrurutsamee
 
การพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัล
การพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัลการพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัล
การพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัลPrachyanun Nilsook
 
หลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไป
หลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไปหลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไป
หลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไปTeaching & Learning Support and Development Center
 
ชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรอง
ชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรองชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรอง
ชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรองชลธิกาญจน์ จินาจันทร์
 
แผน 2คณิตศาสตร์เพิ่มเติม3
แผน 2คณิตศาสตร์เพิ่มเติม3แผน 2คณิตศาสตร์เพิ่มเติม3
แผน 2คณิตศาสตร์เพิ่มเติม3srkschool
 
เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์
เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์
เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์Piyanuch Plaon
 
เรื่องที่ 19 ฟิสิกส์อะตอม
เรื่องที่ 19  ฟิสิกส์อะตอมเรื่องที่ 19  ฟิสิกส์อะตอม
เรื่องที่ 19 ฟิสิกส์อะตอมthanakit553
 
การศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน IS
การศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน ISการศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน IS
การศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน ISRusPateepawanit
 
การวิเคราะห์อัลกอริทึม(algorithm analysis)
การวิเคราะห์อัลกอริทึม(algorithm analysis)การวิเคราะห์อัลกอริทึม(algorithm analysis)
การวิเคราะห์อัลกอริทึม(algorithm analysis)tumetr
 
การถ่ายฝากตัวอ่อน
การถ่ายฝากตัวอ่อนการถ่ายฝากตัวอ่อน
การถ่ายฝากตัวอ่อนWawa Chaiphadung
 
Generic programming in java
Generic programming in javaGeneric programming in java
Generic programming in javaanshu_atri
 
ทฤษฎีจลน์ของแก๊ส
ทฤษฎีจลน์ของแก๊สทฤษฎีจลน์ของแก๊ส
ทฤษฎีจลน์ของแก๊สChanthawan Suwanhitathorn
 
การย่อยอาหารของสัตว์ไม่มีกระดูกสันหลัง
การย่อยอาหารของสัตว์ไม่มีกระดูกสันหลังการย่อยอาหารของสัตว์ไม่มีกระดูกสันหลัง
การย่อยอาหารของสัตว์ไม่มีกระดูกสันหลังThanyamon Chat.
 
เกม Xo การแบ่งเซลล์ ไมโทซีส
เกม Xo การแบ่งเซลล์ ไมโทซีสเกม Xo การแบ่งเซลล์ ไมโทซีส
เกม Xo การแบ่งเซลล์ ไมโทซีสMontaka Jaita
 
ทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุ
ทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุ
ทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุPostharvest Technology Innovation Center
 
ทฤษฎีอะตอมของโบร์
ทฤษฎีอะตอมของโบร์ทฤษฎีอะตอมของโบร์
ทฤษฎีอะตอมของโบร์Chanthawan Suwanhitathorn
 
การเขียนโปรแกรมด้วย Visual basic
การเขียนโปรแกรมด้วย Visual basicการเขียนโปรแกรมด้วย Visual basic
การเขียนโปรแกรมด้วย Visual basicSarun Kitcharoen
 

Was ist angesagt? (20)

เอกสารแคลคูลัส
เอกสารแคลคูลัสเอกสารแคลคูลัส
เอกสารแคลคูลัส
 
การพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัล
การพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัลการพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัล
การพัฒนาระบบจัดการคลังปัญญาแบบวิศวกรรมความรู้ดิจิทัล
 
atom 1
atom 1atom 1
atom 1
 
หลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไป
หลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไปหลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไป
หลักสูตรและการจัดการเรียนการสอน หมวดวิชาศึกษาทั่วไป
 
การใช้งานเวอร์เนียร์คาร์ลิปเปอร์
การใช้งานเวอร์เนียร์คาร์ลิปเปอร์การใช้งานเวอร์เนียร์คาร์ลิปเปอร์
การใช้งานเวอร์เนียร์คาร์ลิปเปอร์
 
ชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรอง
ชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรองชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรอง
ชุดกิจกรรมการเรียนรู้ เรื่องการจำแนกสาร ชุดที่ 1 การแยกสารด้วยวิธีการกรอง
 
แผน 2คณิตศาสตร์เพิ่มเติม3
แผน 2คณิตศาสตร์เพิ่มเติม3แผน 2คณิตศาสตร์เพิ่มเติม3
แผน 2คณิตศาสตร์เพิ่มเติม3
 
เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์
เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์
เวอร์เนียคาลิเปอร์ และ ไมโครมิเตอร์
 
เรื่องที่ 19 ฟิสิกส์อะตอม
เรื่องที่ 19  ฟิสิกส์อะตอมเรื่องที่ 19  ฟิสิกส์อะตอม
เรื่องที่ 19 ฟิสิกส์อะตอม
 
การศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน IS
การศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน ISการศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน IS
การศึกษาการเจริญเติบโตระหว่างพืชที่ใช้ปุ๋ยเคมี และออกซิน IS
 
การวิเคราะห์อัลกอริทึม(algorithm analysis)
การวิเคราะห์อัลกอริทึม(algorithm analysis)การวิเคราะห์อัลกอริทึม(algorithm analysis)
การวิเคราะห์อัลกอริทึม(algorithm analysis)
 
การถ่ายฝากตัวอ่อน
การถ่ายฝากตัวอ่อนการถ่ายฝากตัวอ่อน
การถ่ายฝากตัวอ่อน
 
Generic programming in java
Generic programming in javaGeneric programming in java
Generic programming in java
 
ทฤษฎีจลน์ของแก๊ส
ทฤษฎีจลน์ของแก๊สทฤษฎีจลน์ของแก๊ส
ทฤษฎีจลน์ของแก๊ส
 
การย่อยอาหารของสัตว์ไม่มีกระดูกสันหลัง
การย่อยอาหารของสัตว์ไม่มีกระดูกสันหลังการย่อยอาหารของสัตว์ไม่มีกระดูกสันหลัง
การย่อยอาหารของสัตว์ไม่มีกระดูกสันหลัง
 
เกม Xo การแบ่งเซลล์ ไมโทซีส
เกม Xo การแบ่งเซลล์ ไมโทซีสเกม Xo การแบ่งเซลล์ ไมโทซีส
เกม Xo การแบ่งเซลล์ ไมโทซีส
 
ใบความรู้ Powerpoint 2010
ใบความรู้ Powerpoint 2010 ใบความรู้ Powerpoint 2010
ใบความรู้ Powerpoint 2010
 
ทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุ
ทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุ
ทางเลือกใหม่ในการกำจัดโรคและแมลงด้วยคลื่นความถี่วิทยุ
 
ทฤษฎีอะตอมของโบร์
ทฤษฎีอะตอมของโบร์ทฤษฎีอะตอมของโบร์
ทฤษฎีอะตอมของโบร์
 
การเขียนโปรแกรมด้วย Visual basic
การเขียนโปรแกรมด้วย Visual basicการเขียนโปรแกรมด้วย Visual basic
การเขียนโปรแกรมด้วย Visual basic
 

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

Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิกJava Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิกThanachart Numnonda
 
บทที่ 13 การดักจับเ
บทที่ 13 การดักจับเบทที่ 13 การดักจับเ
บทที่ 13 การดักจับเTheeravaj Tum
 

Ähnlich wie ๋Java Programming [7/12] : GUI Event Handling (7)

Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิกJava Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิก
 
P3
P3P3
P3
 
Swish max
Swish maxSwish max
Swish max
 
บทที่ 13 การดักจับเ
บทที่ 13 การดักจับเบทที่ 13 การดักจับเ
บทที่ 13 การดักจับเ
 
Manual swish max
Manual swish maxManual swish max
Manual swish max
 
ภาษาจาวา 1
ภาษาจาวา 1ภาษาจาวา 1
ภาษาจาวา 1
 
Java script 1
Java script 1Java script 1
Java script 1
 

Mehr von IMC Institute

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

Mehr von IMC Institute (20)

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

๋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 ให้ส ามารถทำา งาน ได้อ ย่า งถูก ต้อ ง