SlideShare a Scribd company logo
บทท 7
      การจดการกบเหตการณกราฟก
         (GUI Event Handling)

           ผศ.ธนศา เครอไวศยวรรณ
           คณะเทคโนโลย(สารสนเทศ
สถาบ,นเทคโนโลย(พระจอมเกล1าเจ1าค2ณทหารลาดกระบ,ง
ว,ตถ2ประสงค8
 นยามความหมายของเหต2การณ8

 แนะน;าคลาสประเภท Event ท(เก(=ยวข1องก,บเหต2การณ8กราฟ?กต@างๆ
                           =
 แนะน;าอนเตอร8เฟสประเภท Listener ท(=ใช1ในการร,บฟDงเหต2การณ8

 อธบายวธ(การสร1างออปเจEคของคลาสประเภท Event Handler

 อธบายวธ(การจ,ดการก,บเหต2การณ8กราฟ?กหลายๆเหต2การณ8

 แนะน;าคลาสประเภท Event Adapter
เหต2การณ8
 เหต2การณ8 (Event) เปIนสถานการณ8ท(=เกดขJนในขณะร,นโปรแกรม อาทเช@น
                                         K
  การใช1อนพ2ต (เมาส8หรอค(ย8บอร8ด) ตดต@อก,บโปรแกรม GUI
 การเกดเหต2การณ8ในโปรแกรมภาษาจาวาจะเปIนการสร1างออปเจEคของคลาส
  ประเภท Event ชนดต@างๆขJนมาตามประเภทของเหต2การณ8 อาทเช@น
                         K
   •   เม=อเล=อนเมาส8ในเฟรมจะเกดออปเจEคของคลาส MouseEvent ขJKนมา
   •   เม=อป?ดเฟรมจะเกดออปเจEคของคลาส WindowEvent ขJKนมา
   •   เม=อกดป2Mมท(อยN@ในเฟรมจะเกดออปเจEคของคลาส ActionEvent ขJKนมา
                   =
   •   เม=อพมพ8ข1อความใน TextField จะเกดออปเจEคของคลาส KeyEvent ขJKนมา
คลาสประเภท Event
 ออปเจคของคลาสประเภท Event ทเกดขนจะแตกต"างกนตามประเภทของ
  เหตการณ
                                              =
 คลาสประเภท Event ในภาษาจาวาจะส(บทอดจากคลาสท(ช(อ
  EventObject
 คลาสประเภท Event ส*าหรบเหตการณทางกราฟ?กจะส(บทอดจากคลาส
  AWTEvent
 คลาสประเภท Event ส*าหรบเหตการณทางกราฟ?กจะอย,"ในแพคเกจ
  java.awt.event
คลาสประเภท Event           (AWT & Swing)

 คลาสประเภท   Event ส*าหรบเหตการณทางกราฟกจะมอย,"สองกล"มค(อ คลาส
  ในแพคเกจ java.awt.event และ javax.swing.event
 คลาสประเภท Event ทใช.โดยพ(นฐานค(อคลาสในแพคเกจ java.awt.event
 ส"วนประกอบทางกราฟกทงในแพคเกจ AWT และ Swing ต"างกสามารถทจะ
  ใช.คลาสเหล"านนได.
 Java SE ในเวอรชน 1.4ได.มการเพมคลาสประเภท Event และอนเตอรเฟส
  ต"างๆ ทเกยวข.องส*าหรบใช.ใน ออบเจกตของคลาสประเภท Swing มากขน
  โดยคลาสและอนเตอรเฟสเหล"านจะอย,"ในแพคเกจ javax.swing.event
คลาสประเภท Event แพคเกจ java.event.awt
คลาสประเภท Event แพคเกจ javax.event.swing
องคประกอบของ Event
 Event ค(อออปเจคตามประเภทของเหตการณ

 Event Source ค(อส"วนทท*าให.เกดเหตการณ

 Event Handler ค(อออปเจคทจะท*าหน.าทจดการกบเหตการณทเกดขนโดยม
  เมธอดทจะรบออปเจคชนด Event ดงกล"าวและมค*าสงในการจดการกบ
  เหตการณเพ(อโต.ตอบกบผ,.ใช.
AWTEvent

 คลาส AWTEvent     เปIน superclass ของคลาสประเภท Event ส;าหร,บ
  เหต2การณ8ทางด1านกราฟ?ก ซJงจะม(อยN@ทงหมด 14 คลาสคอ ActionEvent,
                             =        ,K
  AdjustmentEvent, ComponentEvent, ItemEvent, InputMethodEvent,
  InvocationEvent, TextEvent, FocusEvent, WindowEvent, InputEvent,
  ContainerEvent, PaintEvent, KeyEvent และ MouseEvent
 คลาส AWTEvent และคลาส ObjectEvent ม(เมธอดท(ส;าค,ญด,งน(K
                                             =
   •   Object getSource() เพ=อเร(ยกดNออปเจEคประเภท Event Source
   •   int getID() เพ=อระบ2ชนดของเหต2การณ8
ActionEvent

 จะถNกสร1างขJนในกรณ(ท(=ม(เหต2การณ8เกดขJKนในโปรแกรม GUI ด,งน(K
              K
    •   เม(อมการคลกเมาสบนป2Mม(Button)
    •   เม(อมการป6อนคย Enter ใน TextField
    •   เม(อมการเล(อกเมน,ใน MenuItem
    •   เม(อมการกด double click ใน List
 เมธอดทส*าคญของคลาส ActionEvent ม(ด,งน(K
    •   String getActionCommand() จะส"งช(อค*าสงทเกดขนจาก ActionEvent
    •   int getModifier() จะส"งสถานะของคย Modifier (คย Alt, Ctrl, Meta และ
        Shift) ทเกดขนจากออปเจEคของคลาส ActionEvent
WindowEvent

 จะถNกสร1างขJนในกรณ(ท(=ม(เหต2การณ8เกดขJKนเปIนออปเจEคของคลาสประเภท
              K
  Window มร,ปแบบต"างๆดงน
   •   opened
   •   closed
   •   closing
   •   iconified
   •   deiconified
   •   activated
   •   deactivated
 เมธอดทส*าคญของคลาส WindowEvent ม(ด,งน(K
   •   Object getWindow() จะส"งออปเจคทเป8น   Event Source ชนด Window ค(นมา
MouseEvent

 จะถNกสร1างขJนในกรณ(ท(=ม(การใช1งานเมาส8เพ=อตดต@อก,บผN1ใช1โดยม(เหต2การณ8ท(=
              K
  เกดขJนได1ด,งน(K
       K
    •   dragged
    •   moved
    •   clicked
    •   entered
    •   exited
    •   pressed
    •   released
MouseEvent

 เมธอดทส*าคญของคลาส MouseEvent มด,งน(K
   •   int getX() จะส"งต*าแหน"งพกดของเมาสแกน X ทม(ชนดข1อมNลเปIน int ค(นมา
   •   int getY() จะส"งต*าแหน"งพกดของเมาสแกน Y ทม(ชนดข1อมNลเปIน int ค(นมา
   •   Point getPoint() จะส"งต*าแหน"งพก,ด (x,y) ของเมาสคนมา โดยม(ชนดข1อมNล
                เปIนออปเจEคของคลาส Point
   •   int getClickCount() จะส"งจ*านวนครงของการคลกเมาสคนมา
ItemEvent

 จะถNกสร1างขJนในกรณ(ท(=ม(เหต2การณ8เกดขJKนในโปรแกรม GUI ด,งน(K
              K
    •   เม(อมการเล(อกหร(อยกเลกรายการใน List หร(อ Checkbox
    •   เม(อมการคลกเมาสรายการใน Choice
 เมธอดทส*าคญของคลาส ItemEvent ม(ด,งน(K
    •   ItemSelectable getItemSelectable() จะส"งออปเจคของคลาสประเภท
                        ItemSelectable ทเป8น Event Source ค(นมา
    •   Object getItem() จะส"งออปเจEคของรายการทถ,กเล(อกค(นมา
    •   int getStateChange() จะส@งค@าคงท(ชนด int ท(=ม(ค@าเปIน SELECTED หรอ
                                         =
                 DESELECTED เพ=อระบ2สถานการณ8เลอกของรายการคนมา
Event อ(นๆ

   KeyEvent   เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณการกดคยบอรด
   FocusEvent เป8นคลาสทมการสร.างออปเจคเม(อผ,.ใช.เล(อนอปกรณอนพต
    มาชยงออปเจคของส"วนประกอบกราฟกใดๆ
   ComponentEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณซง
  ออปเจคของส"วนประกอบกราฟกมการเปลยนแปลงเช"น เคล(อนทหร(อปรบ
  ขนาด
 ContainerEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณในการ

  ใส"หร(อยกเลกออปเจคของส"วนประกอบกราฟกลงในออปเจคของคลาส
  ประเภท Container
Event อ(นๆ

   AdjustmentEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณในการ
  ปรบต*าแหน"งชของออปเจคของคลาส ScrollBar หร(อ ScrollPane
 TextEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณในการ

  เปลยนแปลงข.อความในออปเจคของคลาส TextArea
อนเตอร8เฟสประเภท Listener
 ภาษาจาวาจะจ,ดการก,บเหต2การณ8โดยการสร1างออปเจEคท(สามารถร,บฟDง
                                                  =
  เหต2การณ8จากคลาสท(= implements อนเตอร8เฟสประเภท Listener ท(=
  สอดคล1องก,น
 ออปเจEคน(จะท;าหน1าท(=เปIน Event Handler
           K
 อาทเช@น ออปเจEคท(=จะจ,ดการก,บเหต2การณ8ประเภท ActionEvent จะต1อง
  implements อนเตอร8เฟส ActionListener
อนเตอร8เฟสประเภท Listener
   ActionListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส
    ActionEvent
   AdjustmentListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส
    AdjustmentEvent
   ComponentListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส
    ComponentEvent
   ContainerListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส
    ContainerEvent
   FocusListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส
    FocusEvent
   InputMethodListener เปIนอนเตอร8เฟสส;าหร,บอEอบเจกต8ของคลาส
    InputMethodEvent
อนเตอร8เฟสประเภท Listener
   ItemListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส ItemEvent
   KeyListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส KeyEvent
   MouseListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส
    MouseEvent
   MouseMotionListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส
    MouseEvent
   TextListener เปIนอนเตอร8เฟสส;าหร,บอEอบเจกต8ของคลาส TextEvent
   WindowListener เปIนอนเตอร8เฟสส;าหร,บอEอบเจกต8ของคลาส WindowEvent
   AWTEventListener เปIนอนเตอร8เฟสส;าหร,บให1เราสามารถท(=จะไปพ,ฒนาคลาสประเภท
    EventListener ได1
เมธอดท(=ใช1ร,บฟDงเหต2การณ8
 อนเตอร8เฟส             เมธอดท(ใช1รบฟDงเหต2การณ8
                               = ,
ActionListener        addActionListener()
ItemListener          addItemListener()
KeyListener           addKeyListener()
MouseListener         addMouseListener()
MouseMotionListener   addMouseMotionListener()
TextListener          addTextListener()
FocusListener         addFocusListener()
AdjustmentListener    addAdjustmentListener()
เมธอดท(=ใช1ร,บฟDงเหต2การณ8

 อนเตอร8เฟส            เมธอดท(ใช1รบฟDงเหต2การณ8
                              = ,
ComponentListener    addComponentListener()
ContainerListener    addContainerListener()
WindowListener       addWindowListener()
เมธอดท(=ต1องลงทะเบ(ยนเม=อต1องการจ,ดการก,บเหต2การณ8
  อนเตอร8เฟส            เมธอดท(=ตอง implements
                                 1
                       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
                       1
 อนเตอร8เฟส              เมธอดท(ต1อง implements
                                =
ActionListener         actionPerformed(ActionEvent)

ItemListener           itemStateChanged(ItemEvent)

                       mouseClicked(MouseEvent)
                       mouseEntered(MouseEvent)
MouseListener          mouseExited(MouseEvent)
                       mousePressed(MouseEvent)
                       mouseReleased(MouseEvent)

                       mouseMoved(MouseEvent)
MouseMotionListener
                       mouseDragged(MouseEvent)
เมธอดท(=ตอง implements
                       1
 อนเตอร8เฟส             เมธอดท(=ตอง implements
                                 1
                       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
                       1
 อนเตอร8เฟส             เมธอดท(=ตอง implements
                                 1
                       windowOpened(WindowEvent)
                       windowClosed(WindowEvent)
                       windowClosing(WindowEvent)
WindowListener         windowIconified(WindowEvent)
                       windowDeiconified(WindowEvent)
                       windowActivated(WindowEvent)
                       windowDeactivated(WindowEvent)

                       componentAdded(ContainerEvent)
ContainerListener
                       componentRemoved(ContainerEvent)
TextListener           textValueChanged(TextEvent)
การจ,ดการก,บเหต2การณ8
 ภาษาจาวาจะม(วธ(การจ,ดการก,บเหต2การณ8ทเร(ยกว@า Delegation Model โดย
                                       (=
  จะม(หล,กการด,งน(K
   •   ออปเจEคของส@วนประกอบกราฟ?กใดๆสามารถเปIนออปเจEคประเภท Event Source
       ได1 อาทเช@น ออปเจEคของคลาส Button สามารถเปIน Event Source ของ
       ActionEvent ได1
   •   คลาสใดๆสามารถร,บฟDงเหต2การณ8ใดๆกEได1 ถ1าคลาสน,Kน implements
       อนเตอร8เฟสประเภท Listener ท(สอดคล1องก,นอาทเช@น คลาสท(=ตองการร,บฟDง
                                     =                          1
       เหต2การณ8 ActionEvent จะต1อง implements อนเตอร8เฟสท(ช=อ=
     ActionListener
   • ออปเจEคประเภท Event ท(เกดจาก Event Source จะถNกส@งไปย,งออปเจEคของคลาสท(=
                           =
       สามารถร,บฟDงเหต2การณ8ประเภทน,Kน
ออปเจคของคลาสประเภท Event Handler
 Event Source ใดต1องการท(=จะจ,ดการก,บเหต2การณ8ใดต1องลงทะเบ(ยนเพ=อร,บ
  ฟDงเหต2การณ8โดยม(รปแบบด,งน(K
                    N
            eventSource.addXxxListener(listener)

 เราสามารถสร1างออปเจคของคลาสประเภท          Event Handler ได.หลายร,ป
  แบบดงน
   •   ก;าหนดคลาสภายนอกคลาสท(ใช1ในการจ,ดการเหต2การณ8
                                 =
   •   ก;าหนดคลาสท(=เปIนคลาสภายในอยN@ในคลาสท(ใช1ในการจ,ดการเหต2การณ8
                                              =
   •   ก;าหนดให1คลาสท(ใช1ในการจ,ดการเหต2การณ8 implements อนเตอร8เฟสประเภท
                       =
       Listener ท(สอดคล1องก,น และสร1างออปเจEคของคลาสด,งกล@าวภายในคลาสเอง
                   =
   •   ก;าหนดคลาสภายในเมธอด (คลาสประเภท anonymous)
ตวอย"างโปรแกรมสร.างออบเจกตของคลาสภายนอก
import java.awt.FlowLayout;
import javax.swing.*;


public class EventDemo1 {
    public void init() {
        JFrame fr = new JFrame("Outer Class Event Demo");
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton bn1 = new JButton("Exit");
        fr.setLayout(new FlowLayout());
        bn1.addActionListener(new ActionHandler());
        fr.add(bn1);
        fr.setSize(200, 200);
        fr.setVisible(true);
    }
    public static void main(String[] args) {
        EventDemo1 obj = new EventDemo1();
        obj.init();
    }
}
ตวอย"างโปรแกรมสร.างออบเจกตของคลาสภายนอก
public class ActionHandler implements ActionListener {
    public void actionPerformed(ActionEvent ev) {
        System.exit(0);
    }
}




                    ผลล,พธ8ทได1จากการร,นโปรแกรม
                            (=
ค*าอธบายโปรแกรม
 คลาส EventDemo1 มป:มทช(อ bn1 ซงลงทะเบยนรบฟ;งเหตการณประเภท
  ActionEvent   จากค*าสง
      bn1.addActionListener(new ActionHandler());

 ค*าสง new ActionHandler()เป8นการสร.างออปเจคทใช.ในการจดการกบ
  เหตการณประเภท ActionEvent
 คลาส ActionHandler จะต.อง implements อนเตอรเฟสช(อ
  ActionListener

 เมธอดทต.อง implements    ในคลาสค(อ
      public void actionPerformed(ActionEvent ev)
ตวอย"างโปรแกรมการสร.างออบเจกตของคลาสภายใน
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;


  public class EventDemo2 {
      private JFrame fr;
      private JTextField tf;


      public void init() {
          fr = new JFrame("Same Class Event Demo");
          fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          tf = new JTextField(15);
          fr.setLayout(new FlowLayout());
          fr.add(tf);
          tf.setFont(new Font("TimesRoman", Font.BOLD, 16));
          fr.addMouseMotionListener(new MouseHandler());
          fr.setSize(200, 200);
          fr.setVisible(true);
      }
ตวอย"างโปรแกรมการสร.างออบเจกตของคลาสภายใน
   public class MouseHandler implements MouseMotionListener {


          public void mouseDragged(MouseEvent ev) {
              tf.setText("X=" + ev.getX() + " Y=" + ev.getY());
          }


          public void mouseMoved(MouseEvent ev) {
          }
      }


      public static void main(String[] args) {
          EventDemo2 obj = new EventDemo2();
          obj.init();



                 ผลล,พธ8ทได1จากการร,นโปรแกรม
                         (=
      }
  }
ค;าอธบายโปรแกรม
 ตวอย"างโปรแกรม   EventDemo2 มการขนทะเบยนออปเจคของคลาส
  Frame เพ=อร,บฟDงเหต2การณ8 MouseEvent จากค*าสง
     fr.addMouseMotionListener(new MouseHandler());

 โปรแกรมนจะแสดงต*าแหน"งของเมาสเม(อมการเล(อนเมาส
 คลาส MouseHandler เป8นคลาสภายใน    ท;าให1สามารถเร(ยกใช1ค2ณล,กษณะ
  ของคลาส EventDemo2 ได. เช"นออปเจค tf ของคลาส TextField
ตวอย"างแสดงการสร1างออปเจEคภายในคลาสเด(ยวก,น
  import java.awt.event.*;
  import javax.swing.JFrame;


  public class EventDemo3 implements WindowListener{
      public void init() {
          JFrame fr = new JFrame("Same Class Event Demo");
          fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          fr.addWindowListener(this);
          fr.setSize(200, 200);
          fr.setVisible(true);
      }
      public void windowClosing(WindowEvent ev) {
          System.exit(0);
      }
      public void windowOpened(WindowEvent ev) {}
      public void windowClosed(WindowEvent ev) {}
      public void windowIconified(WindowEvent ev) {}
      public void windowDeiconified(WindowEvent ev) {}
ตวอย"างแสดงการสร1างออปเจEคภายในคลาสเด(ยวก,น
 public void windowActivated(WindowEvent ev) {}
     public void windowDeactivated(WindowEvent ev) {}


     public static void main(String[] args) {
         EventDemo3 obj = new EventDemo3();
         obj.init();
     }
 }



            ผลล,พธ8ท(=ได1จากการร,นโปรแกรม
ค;าอธบายโปรแกรม
   this หมายถJงออปเจEคของคลาสเดยวกน
 ตวอย"างโปรแกรมใช.ออปเจค this ในการจดการก,บ WindowEvent      จาก
    ค;าสง
       fr.addWindowListener(this);
 คลาส EventDemo3 ต.อง implements อนเตอรเฟส WindowListener

 ค*าสง System.exit(0); ในเมธอด windowClosing()ท;าให1สามารถ
    ออกจากโปรแกรมได.โดยการคลกเมาส8ท(=เคร=องหมายกากบาทตรง Title Bar
การรบฟ;งเหตการณหลายเหต2การณ8
 Event Source สามารถทจะขนทะเบยนรบฟ;งเหตการณหลายประเภทได. เช@น
   •   fr.addMouseMotionListener(this);
   •   fr.addWindowListener(this);

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

 Event Handler สามารถทจะจดการกบ
                              Event Source ได.หลายตวและ
  ออปเจคของคลาสประเภท Event จะมเมธอดในการทจะแยก Event
  Source ได.
ตวอย"างโปรแกรมทลงทะเบยนรบฟ;งเหตการณสองชนด
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;


 public class EventDemo4 implements MouseMotionListener, WindowListener {
     private JFrame fr;
     private JTextField tf;
     public void init() {
         fr = new JFrame("Multiple Event Demo");
         tf = new JTextField(15);
         fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         fr.setLayout(new FlowLayout());
         fr.add(tf);
         tf.setFont(new Font("TimesRoman", Font.BOLD, 16));
         fr.addMouseMotionListener(this);
         fr.addWindowListener(this);
         fr.setSize(200, 200);
         fr.setVisible(true);
     }
ตวอย"างโปรแกรมทลงทะเบยนรบฟ;งเหตการณสองชนด
 public void mouseDragged(MouseEvent ev) {
         tf.setText("X=" + ev.getX() + " Y=" + ev.getY());
     }


     public void mouseMoved(MouseEvent ev) { }
     public void windowClosing(WindowEvent ev) {
         System.exit(0);
     }
     public void windowOpened(WindowEvent ev) { }

                                                         ผลล,พธ8ท(=ได1จากการร,นโปรแกรม
     public void windowClosed(WindowEvent ev) { }
     public void windowIconified(WindowEvent ev) { }
     public void windowDeiconified(WindowEvent ev) { }
     public void windowActivated(WindowEvent ev) { }
     public void windowDeactivated(WindowEvent ev) { }


     public static void main(String[] args) {
         EventDemo4 obj = new EventDemo4();
         obj.init();
     }
 }
คลาสประเภท Event Adapter
 คลาสประเภท Event Adapter ค(อคลาสทได1 implements อนเตอรเฟส
  ประเภท Listener ไว1แล.ว
 คลาสประเภท   Event Adapter นน ได1ก;าหนดเมธอดต"างๆของอนเตอรเฟสท
  ต.องเขยนไว1แล1ว แต@จะเปIนบลEอกค;าส,งท(=ไม@ม(ค;าส,งใดๆอยN@ภายในบลEอก
                                     =             =
 คลาสประเภท Event Adapter จะช@วยท*าให.เขยนโปรแกรมท(=เปIนคลาส
  ประเภท Event Handler ได.ง"ายขJKนโดยลดจ;านวนเมธอดท(=จะต1องเข(ยนบลEอก
  ค;าส,=ง
คลาสประเภท 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
ต,วอย@างโปรแกรมคลาสประเภท Event Adapter
import javax.swing.JFrame;


public class EventDemo5 {


    public void init() {
        JFrame fr = new JFrame("Adapter Class Event Demo");
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.addWindowListener(new WindowHandler());
        fr.setSize(200, 200);
        fr.setVisible(true);
    }


    public static void main(String[] args) {
        EventDemo5 obj = new EventDemo5();
        obj.init();
    }
}
ต,วอย@างโปรแกรมคลาสประเภท Event Adapter
import java.awt.event.*;


public class WindowHandler extends WindowAdapter {
    public void windowClosing(WindowEvent ev) {
        System.exit(0);
    }
}
การสร1างคลาสแบบ anonymous
 เราสามารถก*าหนดคลาสทงหมดให.อย,"ภายในเมธอดทเรยกใช.งาน

 คลาสประเภทนเรยกว"าคลาสประเภท anonymous
 คลาสประเภท anonymous นยมใช.ในการจดการก,บ Event เช"น การปด
  Frame
ต,วอย@างโปรแกรมคลาสแบบ anonymous
import java.awt.event.*;
import javax.swing.JFrame;


public class EventDemo6 {
    public void init() {
        JFrame fr = new JFrame("Anonymous Class Event Demo");
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.addWindowListener(new WindowAdapter() {
              public void windowClosing(WindowEvent ev) {
                  System.exit(0);
              }
        });
        fr.setSize(200, 200);
        fr.setVisible(true);
    }
    public static void main(String[] args) {
        EventDemo6 obj = new EventDemo6();
        obj.init();
    }
}
สร2ปเนKอหาของบท
 ออปเจEคของคลาสประเภท Event ในแพจเกEจ java.awt.event จะถNก
  สร1างขJKนเม=อม(การกระท;าบางอย@างเกดขJนก,บต,วใส@ส@วนประกอบหรอส@วน
                                       K
  ประกอบกราฟ?ก เช@น ActionEvent เกดขJKนเม=อม(การกด Button หรอ
  WindowEvent เกดขJKนเม=อม(การป?ด Frame
 การจะจ,ดการก,บ Event ประเภทใดน,Kน โดยท,=วไปจะต1องสร1างออปเจEคของ
  คลาสท(= implements อนเตอร8เฟสท(สอดคล1องก,นก,บ Event น,นด1วย เช@น
                                 =                      K
  ถ1าต1องการจ,ดการก,บ WindowEvent จะต1องสร1างออปเจEคของคลาสท(=
  implements อนเตอร8เฟส WindowListener โดยการสร1างออปเจEคอาจ
  สร1างจากคลาสภายนอก คลาสภายใน คลาสเด(ยวก,น หรอคลาสประเภท
  anonymous ซJงคลาสประเภทน(KจะถNกเร(ยกว@าคลาสประเภท Event Handler
               =
สร2ปเนKอหาของบท
 คลาสใดๆสามารถ implements อนเตอร8เฟสได1หลายต,ว ท;าให1สามารถท(=
  จะขJKนทะเบ(ยนร,บฟDงเหต2การณ8ได1หลายเหต2การณ8
 คลาสประเภท Event Adapter ค(อคลาสทได1 implements อนเตอรเฟส
  ประเภท Listener ไว1แล.ว โดยได1ก;าหนดเมธอดต"างๆของอนเตอรเฟสท
  ต.องเขยนไว1แล1ว แต@จะเปIนบลEอกค;าส,งท(=ไม@ม(ค;าส,งใดๆอยN@ภายในบลEอก
                                     =             =
แบบฝrกห,ด
 ข1อท(= 1
    •   ทดลองเข(ยนโปรแกรมจ,ดการเหต2การณ8เพ=อท;าให1โปรแกรม GUI ในแบบฝrกห,ดบทท(=
        6 ให1สามารถท;างานได1อย@างถNกต1อง

More Related Content

PDF
Java Programming: การจัดการกับข้อผิดพลาด
PPT
Java Programming [9/12]: Exception Handling
PPT
Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)
PDF
Java Programming: โครงสร้างควบคุม
PDF
Java Programming: คลาสอินพุตและเอาต์พุต
PDF
Java Programming: อะเรย์และคอลเล็กชั่น
PDF
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
PPT
Java Programming [12/12] : Thread
Java Programming: การจัดการกับข้อผิดพลาด
Java Programming [9/12]: Exception Handling
Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)
Java Programming: โครงสร้างควบคุม
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: อะเรย์และคอลเล็กชั่น
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming [12/12] : Thread

What's hot (20)

PPT
Java Programming [8/12] : Arrays and Collection
PDF
Java-Answer Chapter 05-06 (For Print)
PDF
พื้นฐานภาษาจาวา
PDF
พื้นฐานภาษาจาวา
PPTX
Php เงื่อนไขต่างๆ
PDF
ความรู้เบื้องต้นภาษาจาวา
PPT
พื้นฐานภาษาจาวา
PDF
Java-Answer Chapter 12-13 (For Print)
PPTX
บทที่2
PPT
Computer Programming 2.2
PDF
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
PPTX
Computer Programming 2.1
PDF
Java-Chapter 01 Introduction to Java Programming
PDF
Java-Answer Chapter 01-04 (For Print)
PDF
01 intro php
PDF
Java Programming: หลักการเชิงอ็อบเจกต์
PDF
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PDF
บทที่ 5 คลาส
Java Programming [8/12] : Arrays and Collection
Java-Answer Chapter 05-06 (For Print)
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
Php เงื่อนไขต่างๆ
ความรู้เบื้องต้นภาษาจาวา
พื้นฐานภาษาจาวา
Java-Answer Chapter 12-13 (For Print)
บทที่2
Computer Programming 2.2
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Computer Programming 2.1
Java-Chapter 01 Introduction to Java Programming
Java-Answer Chapter 01-04 (For Print)
01 intro php
Java Programming: หลักการเชิงอ็อบเจกต์
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
บทที่ 5 คลาส
Ad

Viewers also liked (6)

PPT
Java Programming [1/12] : Introduction
PDF
Planning on Mobile Strategy
PDF
PPT
Java Programming [4/12] : Object Oriented Concept
PDF
บทที่ 3 พื้นฐานภาษา Java
PDF
พื้นฐานโปรแกรมภาษาจาวา
Java Programming [1/12] : Introduction
Planning on Mobile Strategy
Java Programming [4/12] : Object Oriented Concept
บทที่ 3 พื้นฐานภาษา Java
พื้นฐานโปรแกรมภาษาจาวา
Ad

More from Thanachart Numnonda (20)

PDF
Thailand Digital Industry Survey Result 2021
PDF
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
PDF
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
PDF
Software Trends Towards AEC 2015
PDF
Personal Cloud
PDF
How would cloud computing Effect to Software Industry?
PDF
Impact of cloud computing to Asian IT Industry
PDF
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
PDF
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
PDF
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
PDF
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
PDF
Cloud Computing กับการใช้งานในองค์กรต่างๆ
PDF
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
PDF
บทความ Google vs. Android
PDF
IT trends for co-creation
PDF
Technology Trends & The Impact for Software Industry
PDF
อยากอยู่ 110 ปี
PDF
Intermediate Java Programming Language (in Thai)
PDF
Government 2.0 กับการเปลี่ยนแปลงองค์กร
Thailand Digital Industry Survey Result 2021
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
Software Trends Towards AEC 2015
Personal Cloud
How would cloud computing Effect to Software Industry?
Impact of cloud computing to Asian IT Industry
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
Cloud Computing กับการใช้งานในองค์กรต่างๆ
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
บทความ Google vs. Android
IT trends for co-creation
Technology Trends & The Impact for Software Industry
อยากอยู่ 110 ปี
Intermediate Java Programming Language (in Thai)
Government 2.0 กับการเปลี่ยนแปลงองค์กร

Java Programming: การจัดการกับเหตุการณ์กราฟิก

  • 1. บทท 7 การจดการกบเหตการณกราฟก (GUI Event Handling) ผศ.ธนศา เครอไวศยวรรณ คณะเทคโนโลย(สารสนเทศ สถาบ,นเทคโนโลย(พระจอมเกล1าเจ1าค2ณทหารลาดกระบ,ง
  • 2. ว,ตถ2ประสงค8  นยามความหมายของเหต2การณ8  แนะน;าคลาสประเภท Event ท(เก(=ยวข1องก,บเหต2การณ8กราฟ?กต@างๆ =  แนะน;าอนเตอร8เฟสประเภท Listener ท(=ใช1ในการร,บฟDงเหต2การณ8  อธบายวธ(การสร1างออปเจEคของคลาสประเภท Event Handler  อธบายวธ(การจ,ดการก,บเหต2การณ8กราฟ?กหลายๆเหต2การณ8  แนะน;าคลาสประเภท Event Adapter
  • 3. เหต2การณ8  เหต2การณ8 (Event) เปIนสถานการณ8ท(=เกดขJนในขณะร,นโปรแกรม อาทเช@น K การใช1อนพ2ต (เมาส8หรอค(ย8บอร8ด) ตดต@อก,บโปรแกรม GUI  การเกดเหต2การณ8ในโปรแกรมภาษาจาวาจะเปIนการสร1างออปเจEคของคลาส ประเภท Event ชนดต@างๆขJนมาตามประเภทของเหต2การณ8 อาทเช@น K • เม=อเล=อนเมาส8ในเฟรมจะเกดออปเจEคของคลาส MouseEvent ขJKนมา • เม=อป?ดเฟรมจะเกดออปเจEคของคลาส WindowEvent ขJKนมา • เม=อกดป2Mมท(อยN@ในเฟรมจะเกดออปเจEคของคลาส ActionEvent ขJKนมา = • เม=อพมพ8ข1อความใน TextField จะเกดออปเจEคของคลาส KeyEvent ขJKนมา
  • 4. คลาสประเภท Event  ออปเจคของคลาสประเภท Event ทเกดขนจะแตกต"างกนตามประเภทของ เหตการณ =  คลาสประเภท Event ในภาษาจาวาจะส(บทอดจากคลาสท(ช(อ EventObject  คลาสประเภท Event ส*าหรบเหตการณทางกราฟ?กจะส(บทอดจากคลาส AWTEvent  คลาสประเภท Event ส*าหรบเหตการณทางกราฟ?กจะอย,"ในแพคเกจ java.awt.event
  • 5. คลาสประเภท Event (AWT & Swing)  คลาสประเภท Event ส*าหรบเหตการณทางกราฟกจะมอย,"สองกล"มค(อ คลาส ในแพคเกจ java.awt.event และ javax.swing.event  คลาสประเภท Event ทใช.โดยพ(นฐานค(อคลาสในแพคเกจ java.awt.event  ส"วนประกอบทางกราฟกทงในแพคเกจ AWT และ Swing ต"างกสามารถทจะ ใช.คลาสเหล"านนได.  Java SE ในเวอรชน 1.4ได.มการเพมคลาสประเภท Event และอนเตอรเฟส ต"างๆ ทเกยวข.องส*าหรบใช.ใน ออบเจกตของคลาสประเภท Swing มากขน โดยคลาสและอนเตอรเฟสเหล"านจะอย,"ในแพคเกจ javax.swing.event
  • 8. องคประกอบของ Event  Event ค(อออปเจคตามประเภทของเหตการณ  Event Source ค(อส"วนทท*าให.เกดเหตการณ  Event Handler ค(อออปเจคทจะท*าหน.าทจดการกบเหตการณทเกดขนโดยม เมธอดทจะรบออปเจคชนด Event ดงกล"าวและมค*าสงในการจดการกบ เหตการณเพ(อโต.ตอบกบผ,.ใช.
  • 9. AWTEvent  คลาส AWTEvent เปIน superclass ของคลาสประเภท Event ส;าหร,บ เหต2การณ8ทางด1านกราฟ?ก ซJงจะม(อยN@ทงหมด 14 คลาสคอ ActionEvent, = ,K AdjustmentEvent, ComponentEvent, ItemEvent, InputMethodEvent, InvocationEvent, TextEvent, FocusEvent, WindowEvent, InputEvent, ContainerEvent, PaintEvent, KeyEvent และ MouseEvent  คลาส AWTEvent และคลาส ObjectEvent ม(เมธอดท(ส;าค,ญด,งน(K = • Object getSource() เพ=อเร(ยกดNออปเจEคประเภท Event Source • int getID() เพ=อระบ2ชนดของเหต2การณ8
  • 10. ActionEvent  จะถNกสร1างขJนในกรณ(ท(=ม(เหต2การณ8เกดขJKนในโปรแกรม GUI ด,งน(K K • เม(อมการคลกเมาสบนป2Mม(Button) • เม(อมการป6อนคย Enter ใน TextField • เม(อมการเล(อกเมน,ใน MenuItem • เม(อมการกด double click ใน List  เมธอดทส*าคญของคลาส ActionEvent ม(ด,งน(K • String getActionCommand() จะส"งช(อค*าสงทเกดขนจาก ActionEvent • int getModifier() จะส"งสถานะของคย Modifier (คย Alt, Ctrl, Meta และ Shift) ทเกดขนจากออปเจEคของคลาส ActionEvent
  • 11. WindowEvent  จะถNกสร1างขJนในกรณ(ท(=ม(เหต2การณ8เกดขJKนเปIนออปเจEคของคลาสประเภท K Window มร,ปแบบต"างๆดงน • opened • closed • closing • iconified • deiconified • activated • deactivated  เมธอดทส*าคญของคลาส WindowEvent ม(ด,งน(K • Object getWindow() จะส"งออปเจคทเป8น Event Source ชนด Window ค(นมา
  • 13. MouseEvent  เมธอดทส*าคญของคลาส MouseEvent มด,งน(K • int getX() จะส"งต*าแหน"งพกดของเมาสแกน X ทม(ชนดข1อมNลเปIน int ค(นมา • int getY() จะส"งต*าแหน"งพกดของเมาสแกน Y ทม(ชนดข1อมNลเปIน int ค(นมา • Point getPoint() จะส"งต*าแหน"งพก,ด (x,y) ของเมาสคนมา โดยม(ชนดข1อมNล เปIนออปเจEคของคลาส Point • int getClickCount() จะส"งจ*านวนครงของการคลกเมาสคนมา
  • 14. ItemEvent  จะถNกสร1างขJนในกรณ(ท(=ม(เหต2การณ8เกดขJKนในโปรแกรม GUI ด,งน(K K • เม(อมการเล(อกหร(อยกเลกรายการใน List หร(อ Checkbox • เม(อมการคลกเมาสรายการใน Choice  เมธอดทส*าคญของคลาส ItemEvent ม(ด,งน(K • ItemSelectable getItemSelectable() จะส"งออปเจคของคลาสประเภท ItemSelectable ทเป8น Event Source ค(นมา • Object getItem() จะส"งออปเจEคของรายการทถ,กเล(อกค(นมา • int getStateChange() จะส@งค@าคงท(ชนด int ท(=ม(ค@าเปIน SELECTED หรอ = DESELECTED เพ=อระบ2สถานการณ8เลอกของรายการคนมา
  • 15. Event อ(นๆ  KeyEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณการกดคยบอรด  FocusEvent เป8นคลาสทมการสร.างออปเจคเม(อผ,.ใช.เล(อนอปกรณอนพต มาชยงออปเจคของส"วนประกอบกราฟกใดๆ  ComponentEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณซง ออปเจคของส"วนประกอบกราฟกมการเปลยนแปลงเช"น เคล(อนทหร(อปรบ ขนาด  ContainerEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณในการ ใส"หร(อยกเลกออปเจคของส"วนประกอบกราฟกลงในออปเจคของคลาส ประเภท Container
  • 16. Event อ(นๆ  AdjustmentEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณในการ ปรบต*าแหน"งชของออปเจคของคลาส ScrollBar หร(อ ScrollPane  TextEvent เป8นคลาสทมการสร.างออปเจคเม(อมเหตการณในการ เปลยนแปลงข.อความในออปเจคของคลาส TextArea
  • 17. อนเตอร8เฟสประเภท Listener  ภาษาจาวาจะจ,ดการก,บเหต2การณ8โดยการสร1างออปเจEคท(สามารถร,บฟDง = เหต2การณ8จากคลาสท(= implements อนเตอร8เฟสประเภท Listener ท(= สอดคล1องก,น  ออปเจEคน(จะท;าหน1าท(=เปIน Event Handler K  อาทเช@น ออปเจEคท(=จะจ,ดการก,บเหต2การณ8ประเภท ActionEvent จะต1อง implements อนเตอร8เฟส ActionListener
  • 18. อนเตอร8เฟสประเภท Listener  ActionListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส ActionEvent  AdjustmentListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส AdjustmentEvent  ComponentListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส ComponentEvent  ContainerListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส ContainerEvent  FocusListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส FocusEvent  InputMethodListener เปIนอนเตอร8เฟสส;าหร,บอEอบเจกต8ของคลาส InputMethodEvent
  • 19. อนเตอร8เฟสประเภท Listener  ItemListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส ItemEvent  KeyListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส KeyEvent  MouseListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส MouseEvent  MouseMotionListener เปIนอนเตอร8เฟสส;าหร,บออปเจEคของคลาส MouseEvent  TextListener เปIนอนเตอร8เฟสส;าหร,บอEอบเจกต8ของคลาส TextEvent  WindowListener เปIนอนเตอร8เฟสส;าหร,บอEอบเจกต8ของคลาส WindowEvent  AWTEventListener เปIนอนเตอร8เฟสส;าหร,บให1เราสามารถท(=จะไปพ,ฒนาคลาสประเภท EventListener ได1
  • 20. เมธอดท(=ใช1ร,บฟDงเหต2การณ8 อนเตอร8เฟส เมธอดท(ใช1รบฟDงเหต2การณ8 = , ActionListener addActionListener() ItemListener addItemListener() KeyListener addKeyListener() MouseListener addMouseListener() MouseMotionListener addMouseMotionListener() TextListener addTextListener() FocusListener addFocusListener() AdjustmentListener addAdjustmentListener()
  • 21. เมธอดท(=ใช1ร,บฟDงเหต2การณ8 อนเตอร8เฟส เมธอดท(ใช1รบฟDงเหต2การณ8 = , ComponentListener addComponentListener() ContainerListener addContainerListener() WindowListener addWindowListener()
  • 22. เมธอดท(=ต1องลงทะเบ(ยนเม=อต1องการจ,ดการก,บเหต2การณ8 อนเตอร8เฟส เมธอดท(=ตอง implements 1 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 1 อนเตอร8เฟส เมธอดท(ต1อง implements = ActionListener actionPerformed(ActionEvent) ItemListener itemStateChanged(ItemEvent) mouseClicked(MouseEvent) mouseEntered(MouseEvent) MouseListener mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseMoved(MouseEvent) MouseMotionListener mouseDragged(MouseEvent)
  • 24. เมธอดท(=ตอง implements 1 อนเตอร8เฟส เมธอดท(=ตอง implements 1 keyPressed(KeyEvent) KeyListener keyReleased(KeyEvent) keyTyped(KeyEvent) focusGained(FocusEvent) FocusListener focusLost(FocusEvent) adjustmentValueChanged AdjustmentListener (AdjustmentEvent) componentMoved(ComponentEvent) componentHidden(ComponentEvent) ComponentListener componentResized(ComponentEvent) componentShown(ComponentEvent)
  • 25. เมธอดท(=ตอง implements 1 อนเตอร8เฟส เมธอดท(=ตอง implements 1 windowOpened(WindowEvent) windowClosed(WindowEvent) windowClosing(WindowEvent) WindowListener windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) componentAdded(ContainerEvent) ContainerListener componentRemoved(ContainerEvent) TextListener textValueChanged(TextEvent)
  • 26. การจ,ดการก,บเหต2การณ8  ภาษาจาวาจะม(วธ(การจ,ดการก,บเหต2การณ8ทเร(ยกว@า Delegation Model โดย (= จะม(หล,กการด,งน(K • ออปเจEคของส@วนประกอบกราฟ?กใดๆสามารถเปIนออปเจEคประเภท Event Source ได1 อาทเช@น ออปเจEคของคลาส Button สามารถเปIน Event Source ของ ActionEvent ได1 • คลาสใดๆสามารถร,บฟDงเหต2การณ8ใดๆกEได1 ถ1าคลาสน,Kน implements อนเตอร8เฟสประเภท Listener ท(สอดคล1องก,นอาทเช@น คลาสท(=ตองการร,บฟDง = 1 เหต2การณ8 ActionEvent จะต1อง implements อนเตอร8เฟสท(ช=อ= ActionListener • ออปเจEคประเภท Event ท(เกดจาก Event Source จะถNกส@งไปย,งออปเจEคของคลาสท(= = สามารถร,บฟDงเหต2การณ8ประเภทน,Kน
  • 27. ออปเจคของคลาสประเภท Event Handler  Event Source ใดต1องการท(=จะจ,ดการก,บเหต2การณ8ใดต1องลงทะเบ(ยนเพ=อร,บ ฟDงเหต2การณ8โดยม(รปแบบด,งน(K N eventSource.addXxxListener(listener)  เราสามารถสร1างออปเจคของคลาสประเภท Event Handler ได.หลายร,ป แบบดงน • ก;าหนดคลาสภายนอกคลาสท(ใช1ในการจ,ดการเหต2การณ8 = • ก;าหนดคลาสท(=เปIนคลาสภายในอยN@ในคลาสท(ใช1ในการจ,ดการเหต2การณ8 = • ก;าหนดให1คลาสท(ใช1ในการจ,ดการเหต2การณ8 implements อนเตอร8เฟสประเภท = Listener ท(สอดคล1องก,น และสร1างออปเจEคของคลาสด,งกล@าวภายในคลาสเอง = • ก;าหนดคลาสภายในเมธอด (คลาสประเภท anonymous)
  • 28. ตวอย"างโปรแกรมสร.างออบเจกตของคลาสภายนอก import java.awt.FlowLayout; import javax.swing.*; public class EventDemo1 { public void init() { JFrame fr = new JFrame("Outer Class Event Demo"); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton bn1 = new JButton("Exit"); fr.setLayout(new FlowLayout()); bn1.addActionListener(new ActionHandler()); fr.add(bn1); fr.setSize(200, 200); fr.setVisible(true); } public static void main(String[] args) { EventDemo1 obj = new EventDemo1(); obj.init(); } }
  • 29. ตวอย"างโปรแกรมสร.างออบเจกตของคลาสภายนอก public class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent ev) { System.exit(0); } } ผลล,พธ8ทได1จากการร,นโปรแกรม (=
  • 30. ค*าอธบายโปรแกรม  คลาส EventDemo1 มป:มทช(อ bn1 ซงลงทะเบยนรบฟ;งเหตการณประเภท ActionEvent จากค*าสง bn1.addActionListener(new ActionHandler());  ค*าสง new ActionHandler()เป8นการสร.างออปเจคทใช.ในการจดการกบ เหตการณประเภท ActionEvent  คลาส ActionHandler จะต.อง implements อนเตอรเฟสช(อ ActionListener  เมธอดทต.อง implements ในคลาสค(อ public void actionPerformed(ActionEvent ev)
  • 31. ตวอย"างโปรแกรมการสร.างออบเจกตของคลาสภายใน import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDemo2 { private JFrame fr; private JTextField tf; public void init() { fr = new JFrame("Same Class Event Demo"); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); tf = new JTextField(15); fr.setLayout(new FlowLayout()); fr.add(tf); tf.setFont(new Font("TimesRoman", Font.BOLD, 16)); fr.addMouseMotionListener(new MouseHandler()); fr.setSize(200, 200); fr.setVisible(true); }
  • 32. ตวอย"างโปรแกรมการสร.างออบเจกตของคลาสภายใน public class MouseHandler implements MouseMotionListener { public void mouseDragged(MouseEvent ev) { tf.setText("X=" + ev.getX() + " Y=" + ev.getY()); } public void mouseMoved(MouseEvent ev) { } } public static void main(String[] args) { EventDemo2 obj = new EventDemo2(); obj.init(); ผลล,พธ8ทได1จากการร,นโปรแกรม (= } }
  • 33. ค;าอธบายโปรแกรม  ตวอย"างโปรแกรม EventDemo2 มการขนทะเบยนออปเจคของคลาส Frame เพ=อร,บฟDงเหต2การณ8 MouseEvent จากค*าสง fr.addMouseMotionListener(new MouseHandler());  โปรแกรมนจะแสดงต*าแหน"งของเมาสเม(อมการเล(อนเมาส  คลาส MouseHandler เป8นคลาสภายใน ท;าให1สามารถเร(ยกใช1ค2ณล,กษณะ ของคลาส EventDemo2 ได. เช"นออปเจค tf ของคลาส TextField
  • 34. ตวอย"างแสดงการสร1างออปเจEคภายในคลาสเด(ยวก,น import java.awt.event.*; import javax.swing.JFrame; public class EventDemo3 implements WindowListener{ public void init() { JFrame fr = new JFrame("Same Class Event Demo"); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fr.addWindowListener(this); fr.setSize(200, 200); fr.setVisible(true); } public void windowClosing(WindowEvent ev) { System.exit(0); } public void windowOpened(WindowEvent ev) {} public void windowClosed(WindowEvent ev) {} public void windowIconified(WindowEvent ev) {} public void windowDeiconified(WindowEvent ev) {}
  • 35. ตวอย"างแสดงการสร1างออปเจEคภายในคลาสเด(ยวก,น public void windowActivated(WindowEvent ev) {} public void windowDeactivated(WindowEvent ev) {} public static void main(String[] args) { EventDemo3 obj = new EventDemo3(); obj.init(); } } ผลล,พธ8ท(=ได1จากการร,นโปรแกรม
  • 36. ค;าอธบายโปรแกรม  this หมายถJงออปเจEคของคลาสเดยวกน  ตวอย"างโปรแกรมใช.ออปเจค this ในการจดการก,บ WindowEvent จาก ค;าสง fr.addWindowListener(this);  คลาส EventDemo3 ต.อง implements อนเตอรเฟส WindowListener  ค*าสง System.exit(0); ในเมธอด windowClosing()ท;าให1สามารถ ออกจากโปรแกรมได.โดยการคลกเมาส8ท(=เคร=องหมายกากบาทตรง Title Bar
  • 37. การรบฟ;งเหตการณหลายเหต2การณ8  Event Source สามารถทจะขนทะเบยนรบฟ;งเหตการณหลายประเภทได. เช@น • fr.addMouseMotionListener(this); • fr.addWindowListener(this);  คลาสใดๆสามารถ implements อนเตอรเฟสหลายตวได. เช"น • public class EventDemo4 implements MouseMotionListener, WindowListener  Event Handler สามารถทจะจดการกบ Event Source ได.หลายตวและ ออปเจคของคลาสประเภท Event จะมเมธอดในการทจะแยก Event Source ได.
  • 38. ตวอย"างโปรแกรมทลงทะเบยนรบฟ;งเหตการณสองชนด import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDemo4 implements MouseMotionListener, WindowListener { private JFrame fr; private JTextField tf; public void init() { fr = new JFrame("Multiple Event Demo"); tf = new JTextField(15); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fr.setLayout(new FlowLayout()); fr.add(tf); tf.setFont(new Font("TimesRoman", Font.BOLD, 16)); fr.addMouseMotionListener(this); fr.addWindowListener(this); fr.setSize(200, 200); fr.setVisible(true); }
  • 39. ตวอย"างโปรแกรมทลงทะเบยนรบฟ;งเหตการณสองชนด public void mouseDragged(MouseEvent ev) { tf.setText("X=" + ev.getX() + " Y=" + ev.getY()); } public void mouseMoved(MouseEvent ev) { } public void windowClosing(WindowEvent ev) { System.exit(0); } public void windowOpened(WindowEvent ev) { } ผลล,พธ8ท(=ได1จากการร,นโปรแกรม public void windowClosed(WindowEvent ev) { } public void windowIconified(WindowEvent ev) { } public void windowDeiconified(WindowEvent ev) { } public void windowActivated(WindowEvent ev) { } public void windowDeactivated(WindowEvent ev) { } public static void main(String[] args) { EventDemo4 obj = new EventDemo4(); obj.init(); } }
  • 40. คลาสประเภท Event Adapter  คลาสประเภท Event Adapter ค(อคลาสทได1 implements อนเตอรเฟส ประเภท Listener ไว1แล.ว  คลาสประเภท Event Adapter นน ได1ก;าหนดเมธอดต"างๆของอนเตอรเฟสท ต.องเขยนไว1แล1ว แต@จะเปIนบลEอกค;าส,งท(=ไม@ม(ค;าส,งใดๆอยN@ภายในบลEอก = =  คลาสประเภท Event Adapter จะช@วยท*าให.เขยนโปรแกรมท(=เปIนคลาส ประเภท Event Handler ได.ง"ายขJKนโดยลดจ;านวนเมธอดท(=จะต1องเข(ยนบลEอก ค;าส,=ง
  • 41. คลาสประเภท 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
  • 42. ต,วอย@างโปรแกรมคลาสประเภท Event Adapter import javax.swing.JFrame; public class EventDemo5 { public void init() { JFrame fr = new JFrame("Adapter Class Event Demo"); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fr.addWindowListener(new WindowHandler()); fr.setSize(200, 200); fr.setVisible(true); } public static void main(String[] args) { EventDemo5 obj = new EventDemo5(); obj.init(); } }
  • 43. ต,วอย@างโปรแกรมคลาสประเภท Event Adapter import java.awt.event.*; public class WindowHandler extends WindowAdapter { public void windowClosing(WindowEvent ev) { System.exit(0); } }
  • 44. การสร1างคลาสแบบ anonymous  เราสามารถก*าหนดคลาสทงหมดให.อย,"ภายในเมธอดทเรยกใช.งาน  คลาสประเภทนเรยกว"าคลาสประเภท anonymous  คลาสประเภท anonymous นยมใช.ในการจดการก,บ Event เช"น การปด Frame
  • 45. ต,วอย@างโปรแกรมคลาสแบบ anonymous import java.awt.event.*; import javax.swing.JFrame; public class EventDemo6 { public void init() { JFrame fr = new JFrame("Anonymous Class Event Demo"); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fr.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { System.exit(0); } }); fr.setSize(200, 200); fr.setVisible(true); } public static void main(String[] args) { EventDemo6 obj = new EventDemo6(); obj.init(); } }
  • 46. สร2ปเนKอหาของบท  ออปเจEคของคลาสประเภท Event ในแพจเกEจ java.awt.event จะถNก สร1างขJKนเม=อม(การกระท;าบางอย@างเกดขJนก,บต,วใส@ส@วนประกอบหรอส@วน K ประกอบกราฟ?ก เช@น ActionEvent เกดขJKนเม=อม(การกด Button หรอ WindowEvent เกดขJKนเม=อม(การป?ด Frame  การจะจ,ดการก,บ Event ประเภทใดน,Kน โดยท,=วไปจะต1องสร1างออปเจEคของ คลาสท(= implements อนเตอร8เฟสท(สอดคล1องก,นก,บ Event น,นด1วย เช@น = K ถ1าต1องการจ,ดการก,บ WindowEvent จะต1องสร1างออปเจEคของคลาสท(= implements อนเตอร8เฟส WindowListener โดยการสร1างออปเจEคอาจ สร1างจากคลาสภายนอก คลาสภายใน คลาสเด(ยวก,น หรอคลาสประเภท anonymous ซJงคลาสประเภทน(KจะถNกเร(ยกว@าคลาสประเภท Event Handler =
  • 47. สร2ปเนKอหาของบท  คลาสใดๆสามารถ implements อนเตอร8เฟสได1หลายต,ว ท;าให1สามารถท(= จะขJKนทะเบ(ยนร,บฟDงเหต2การณ8ได1หลายเหต2การณ8  คลาสประเภท Event Adapter ค(อคลาสทได1 implements อนเตอรเฟส ประเภท Listener ไว1แล.ว โดยได1ก;าหนดเมธอดต"างๆของอนเตอรเฟสท ต.องเขยนไว1แล1ว แต@จะเปIนบลEอกค;าส,งท(=ไม@ม(ค;าส,งใดๆอยN@ภายในบลEอก = =
  • 48. แบบฝrกห,ด  ข1อท(= 1 • ทดลองเข(ยนโปรแกรมจ,ดการเหต2การณ8เพ=อท;าให1โปรแกรม GUI ในแบบฝrกห,ดบทท(= 6 ให1สามารถท;างานได1อย@างถNกต1อง