Your SlideShare is downloading. ×
บทที่ 7 การจัด การกับ เหตุก ารณ์        กราฟฟิก (GUI Event Handling)    อ.ธนิศ า เครือ ไวศยวรรณ   คณะเทคโนโลยีส ารสนเทศสถา...
วัต ถุป ระสงค์ นิย ามความหมายของเหตุก ารณ์ แนะนำา คลาสประเภท Event     ทีเ กีย วข้อ งกับ                                ...
เหตุก ารณ์ เหตุก ารณ์ (Event) เป็น สถานการณ์ท เ กิด ขึ้น ใน                                         ี่ ขณะรัน โปรแกรม อาท...
คลาสประเภท            Event ออปเจ็ค ของคลาสประเภท Event    ทีเ กิด ขึ้น จะแตก                                   ่  ต่า งก...
คลาสประเภท Event สำา หรับ   เหตุก ารณ์ก ราฟฟิก
องค์ป ระกอบของ               Event Event   คือ ออปเจ็ค ตามประเภทของเหตุก ารณ์ Event   Source คือ ส่ว นทีท ำา ให้เ กิด เห...
AWTEvent คลาส AWTEvent เป็น superclass ของคลาส  ประเภท Event สำา หรับ เหตุก ารณ์ท างด้า นกราฟฟิก  ซึ่ง จะมีอ ยูท ง หมด 11...
ActionEvent จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน                           ี่ ี โปรแกรม GUI ดัง นี้   • เม...
WindowEvent จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น เป็น                           ี่ ี  ออปเจ็ค ของคลาสประเภท  ...
MouseEvent จะถูก สร้า งขึ้น ในกรณีท ม ก ารใช้ง านเมาส์เ พือ                           ี่ ี                  ่ ติด ต่อ กับ...
MouseEvent เมธอดทีส ำา คัญ ของคลาส MouseEvent         ่                                        มีด ัง นี้  •   int getX()...
ItemEvent จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน                           ี่ ี โปรแกรม GUI ดัง นี้   • เมื่...
Event   อื่น ๆ   KeyEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี                          ่ ี                 ่    เหตุก า...
Event   อื่น ๆ   AdjustmentEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ                               ่ ี                   ่...
อิน เตอร์เ ฟสประเภท                Listener ภาษาจาวาจะจัด การกับ เหตุก ารณ์โ ดยการสร้า ง  ออปเจ็ค ทีส ามารถรับ ฟัง เหตุก ...
อิน เตอร์เ ฟสประเภท               Listener   ActionListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ    คลาส   ActionEven...
อิน เตอร์เ ฟสประเภท               Listener   ItemListener   เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ    คลาส   ItemEvent  ...
เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์        ่                            เมธอดทีใ ช้ร ับ ฟัง                                   ่...
เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์        ่                           เมธอดทีใ ช้ร ับ ฟัง                                  ่  ...
เมธอดที่ต ้อ งลงทะเบีย นเมื่อ ต้อ งการ      จัด การกับ เหตุก ารณ์     อิน เตอร์เ ฟส       เมธอดทีต ้อ ง                   ...
เมธอดที่ต ้อ ง implements     อิน เตอร์เ ฟส        เมธอดทีต ้อ ง                                 ่        implementsAction...
เมธอดที่ต ้อ ง implements     อิน เตอร์เ ฟส       เมธอดทีต ้อ ง                                ่         implements       ...
เมธอดที่ต ้อ ง implements     อิน เตอร์เ ฟส       เมธอดทีต ้อ ง                                ่        implements        ...
การจัด การกับ เหตุก ารณ์ ภาษาจาวาจะมีว ิธ ีก ารจัด การกับ เหตุก ารณ์ท เ รีย ก                                            ...
ออปเจ็ค ของคลาสประเภท Event            Handler Event  Source ใดต้อ งการทีจ ะจัด การกับ                             ่ เหตุ...
ตัว อย่า งโปรแกรมimport java.awt.*; import java.awt.*;import java.awt.event.*; import java.awt.event.*;public class EventD...
คำา อธิบ ายโปรแกรม คลาส EventDemo1 มีป ุ่ม ที่ช อ bn1 ซึ่ง ลงทะเบีย นรับ ฟัง                               ื่  เหตุก ารณ์...
ตัว อย่า งโปรแกรมimport java.awt.*; import java.awt.*;import java.awt.event.*; import java.awt.event.*;public class EventD...
ตัว อย่า งโปรแกรม            public void mouseDragged(MouseEvent ev) {{             public void mouseDragged(MouseEvent ev...
คำา อธิบ ายโปรแกรม ตัว อย่า งโปรแกรม EventDemo2 มีก ารขึ้น ทะ เบีย นออปเจ็ค ของคลาส Frame เพือ รับ ฟัง                   ...
ตัว อย่า งแสดงการสร้า งออปเจ็ค      ภายในคลาสเดีย วกันimport java.awt.*; import java.awt.*;import java.awt.event.*; import...
ตัว อย่า งแสดงการสร้า งออปเจ็ค      ภายในคลาสเดีย วกัน     public void windowOpened(WindowEvent ev) {{ }}      public void...
คำา อธิบ ายโปรแกรม   this   หมายถึง ออปเจ็ค ของคลาสเดีย วกัน ตัว อย่า งโปรแกรมใช้อ อปเจ็ค this     ในการจัด การ  กับ Win...
การรับ ฟัง เหตุก ารณ์ห ลาย                เหตุก ารณ์ Event Source สามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง                       ่...
ตัว อย่า งโปรแกรมimport java.awt.*; import java.awt.*;import java.awt.event.*; import java.awt.event.*;public class EventD...
ตัว อย่า งโปรแกรม     public static void main(String args[]) {{      public static void main(String args[])          Event...
คลาสประเภท Event Adapter คลาสประเภท       Event Adapter คือ คลาสที่ไ ด้ implements   อิน เตอร์เ ฟส ประเภท Listener ไว้แ ล...
คลาสประเภท Event Adapter คลาสประเภท        Event Adapter มีด ัง นี้  •   MouseAdapter คือ คลาสที่ implements อิน เตอร์เ ฟ...
ตัว อย่า งโปรแกรมimport java.awt.*; import java.awt.*;import java.awt.event.*; import java.awt.event.*;public class EventD...
การสร้า งคลาสแบบ anonymous เราสามารถกำา หนดคลาสทัง หมดให้อ ยู่ภ ายใน                        ้ เมธอดทีเ รีย กใช้ง าน      ...
ตัว อย่า งโปรแกรมimport java.awt.*; import java.awt.*;import java.awt.event.*; import java.awt.event.*;public class EventD...
สรุป เนื้อ หาของบท ออปเจ็ค ของคลาสประเภท Event ในแพจเก็จ  java.awt.event จะถูก สร้า งขึ้น เมือ มีก ารกระทำา บาง          ...
สรุป เนื้อ หาของบท คลาสใดๆสามารถ implements      อิน เตอร์เ ฟสได้ห ลาย ตัว ทำา ให้ส ามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง เหตุก ...
แบบฝึก หัด ข้อ ที่   1    • ทดลองเขีย นโปรแกรมจัด การเหตุก ารณ์เ พื่อ ทำา ให้     โปรแกรม GUI ในแบบฝึก หัด บทที่ 6 ให้ส า...
Upcoming SlideShare
Loading in...5
×

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

2,576

Published on

เอกสารแนะนำการเขียนโปรแกรมภาษาจาวา

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,576
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. บทที่ 7 การจัด การกับ เหตุก ารณ์ กราฟฟิก (GUI Event Handling) อ.ธนิศ า เครือ ไวศยวรรณ คณะเทคโนโลยีส ารสนเทศสถาบัน เทคโนโลยีพ ระจอมเกล้า เจ้า
  2. 2. วัต ถุป ระสงค์ นิย ามความหมายของเหตุก ารณ์ แนะนำา คลาสประเภท Event ทีเ กีย วข้อ งกับ ่ ่ เหตุก ารณ์ก ราฟฟิก ต่า งๆ แนะนำา อิน เตอร์เ ฟสประเภท Listener ทีใ ช้ใ นการ ่ รับ ฟัง เหตุก ารณ์ อธิบ ายวิธ ีก ารสร้า งออปเจ็ค ของคลาสประเภท Event Handler อธิบ ายวิธ ีก ารจัด การกับ เหตุก ารณ์ก ราฟฟิก หลายๆเหตุก ารณ์ แนะนำา คลาสประเภท Event Adapter
  3. 3. เหตุก ารณ์ เหตุก ารณ์ (Event) เป็น สถานการณ์ท เ กิด ขึ้น ใน ี่ ขณะรัน โปรแกรม อาทิเ ช่น การใช้อ ิน พุต (เมาส์ หรือ คีย บ อร์ด ) ติด ต่อ กับ โปรแกรม GUI ์ การเกิด เหตุก ารณ์ใ นโปรแกรมภาษาจาวาจะ เป็น การสร้า งออปเจ็ค ของคลาสประเภท Event ชนิด ต่า งๆขึ้น มาตามประเภทของเหตุก ารณ์ อาทิ เช่น • เมื่อ เลื่อ นเมาส์ใ นเฟรมจะเกิด ออปเจ็ค ของคลาส MouseEvent ขึ้น มา • เมื่อ ปิด เฟรมจะเกิด ออปเจ็ค ของคลาส WindowEvent ขึ้น มา • เมื่อ กดปุ่ม ที่อ ยู่ใ นเฟรมจะเกิด ออปเจ็ค ของคลาส ActionEvent ขึ้น มา
  4. 4. คลาสประเภท Event ออปเจ็ค ของคลาสประเภท Event ทีเ กิด ขึ้น จะแตก ่ ต่า งกัน ตามประเภทของเหตุก ารณ์ คลาสประเภท Event ในภาษาจาวาจะสืบ ทอดจาก คลาสทีชื่อ EventObject ่ คลาสประเภท Event สำา หรับ เหตุก ารณ์ท าง กราฟฟิก จะสืบ ทอดจากคลาส AWTEvent คลาสประเภท Event สำา หรับ เหตุก ารณ์ท าง กราฟฟิก จะอยู่ใ นแพคเก็จ java.awt.event
  5. 5. คลาสประเภท Event สำา หรับ เหตุก ารณ์ก ราฟฟิก
  6. 6. องค์ป ระกอบของ Event Event คือ ออปเจ็ค ตามประเภทของเหตุก ารณ์ Event Source คือ ส่ว นทีท ำา ให้เ กิด เหตุก ารณ์ ่ Event Handler คือ ออปเจ็ค ที่จ ะทำา หน้า ทีจ ัด การ ่ กับ เหตุก ารณ์ท เ กิด ขึ้น โดยมีเ มธอดทีจ ะรับ ออปเจ็ ี่ ่ คชนิด Event ดัง กล่า วและมีค ำา สัง ในการจัด การกับ ่ เหตุก ารณ์เ พือ โต้ต อบกับ ผู้ใ ช้ ่
  7. 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. 8. ActionEvent จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน ี่ ี โปรแกรม GUI ดัง นี้ • เมื่อ มีก ารคลิก เมาส์บ นปุ่ม (Button) • เมื่อ มีก ารป้อ นคีย ์ Enter ใน TextField • เมื่อ มีก ารเลือ กเมนูใ น MenuItem • เมื่อ มีก ารกด double click ใน List เมธอดทีส ำา คัญ ของคลาส ActionEvent ่ มีด ัง นี้ • String getActionCommand() จะส่ง ชื่อ คำา สั่ง ที่เ กิด ขึ้น จาก ActionEvent • int getModifier() จะส่ง สถานะของคีย ์ Modifier (คีย ์ Alt, Ctrl, Meta และ Shift) ที่เ กิด ขึ้น จากออปเจ็ค ของ คลาส ActionEvent
  9. 9. WindowEvent จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น เป็น ี่ ี ออปเจ็ค ของคลาสประเภท Window มีร ูป แบบต่า งๆ ดัง นี้ • opened • closed • closing • iconified • deiconified • activated • deactivated เมธอดทีส ำา คัญ ของคลาส WindowEvent ่ มีด ัง นี้ • Object getWindow() จะส่ง ออปเจ็ค ที่เ ป็น Event Source ชนิด Window คืน มา
  10. 10. MouseEvent จะถูก สร้า งขึ้น ในกรณีท ม ก ารใช้ง านเมาส์เ พือ ี่ ี ่ ติด ต่อ กับ ผู้ใ ช้โ ดยมีเ หตุก ารณ์ท เ กิด ขึ้น ได้ด ัง นี้ ี่ • dragged • moved • clicked • entered • exited • pressed • released
  11. 11. MouseEvent เมธอดทีส ำา คัญ ของคลาส MouseEvent ่ มีด ัง นี้ • int getX() จะส่ง ตำา แหน่ง พิก ัด ของเมาส์แ กน X ที่ม ีช นิด ข้อ มูล เป็น int คืน มา • int getY() จะส่ง ตำา แหน่ง พิก ัด ของเมาส์แ กน Y ที่ม ีช นิด ข้อ มูล เป็น int คืน มา • Point getPoint() จะส่ง ตำา แหน่ง พิก ัด (x,y) ของเมาส์ค ืน มา โดยมีช นิด ข้อ มูล เป็น ออปเจ็ค ของคลาส Point • int getClickCount() จะส่ง จำา นวนครั้ง ของการ คลิก เมาส์ คืน มา
  12. 12. ItemEvent จะถูก สร้า งขึ้น ในกรณีท ม เ หตุก ารณ์เ กิด ขึ้น ใน ี่ ี โปรแกรม GUI ดัง นี้ • เมื่อ มีก ารเลือ กหรือ ยกเลิก รายการใน List หรือ Checkbox • เมื่อ มีก ารคลิก เมาส์ร ายการใน Choice เมธอดทีส ำา คัญ ของคลาส ่ ItemEvent มีด ัง นี้ • ItemSelectable getItemSelectable() จะส่ง ออปเจ็ค ของ คลาสประเภท ItemSelectable ที่เ ป็น Event Source คืน มา • Object getItem() จะส่ง ออปเจ็ค ของรายการที่ถ ูก เลือ ก คืน มา • int getStateChange() จะส่ง ค่า คงที่ช นิด int ที่ม ีค ่า เป็น SELECTED หรือ DESELECTED เพื่อ ระบุส ถานการณ์เ ลือ กของรายการคืน มา
  13. 13. Event อื่น ๆ KeyEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี ่ ี ่ เหตุก ารณ์ก ารกดคีย บ อร์ด ์ FocusEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ ผู้ใ ช้ ่ ี ่ เลื่อ นอุป กรณ์อ ิน พุต มาชี้ย ง ออปเจ็ค ของส่ว น ั ประกอบกราฟฟิก ใดๆ ComponentEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี ่ ี ่ เหตุก ารณ์ซ งึ่ ออปเจ็ค ของส่ว นประกอบกราฟฟิก มีก าร เปลี่ย นแปลงเช่น เคลื่อ นทีห รือ ปรับ ขนาด ่ ContainerEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ ่ ี ่ มีเ หตุก ารณ์ใ นการใส่ห รือ ยกเลิก ออปเจ็ค ของส่ว น ประกอบกราฟฟิก ลงในออปเจ็ค ของคลาสประเภท
  14. 14. Event อื่น ๆ AdjustmentEventเป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ ่ ี ่ มีเ หตุก ารณ์ใ นการปรับ ตำา แหน่ง ชี้ข องออปเจ็ค ของคลาส ScrollBar หรือ ScrollPane TextEvent เป็น คลาสทีม ก ารสร้า งออปเจ็ค เมือ มี ่ ี ่ เหตุก ารณ์ใ นการเปลี่ย นแปลงข้อ ความในออปเจ็ค ของคลาส TextArea
  15. 15. อิน เตอร์เ ฟสประเภท Listener ภาษาจาวาจะจัด การกับ เหตุก ารณ์โ ดยการสร้า ง ออปเจ็ค ทีส ามารถรับ ฟัง เหตุก ารณ์จ ากคลาสที่ ่ implements อิน เตอร์เ ฟสประเภท Listener ที่ สอดคล้อ งกัน ออปเจ็ค นีจ ะทำา หน้า ที่เ ป็น ้ Event Handler อาทิเ ช่น ออปเจ็ค ทีจ ะจัด การกับ เหตุก ารณ์ป ระเภท ่ ActionEvent จะต้อ ง implements อิน เตอร์เ ฟส ActionListener
  16. 16. อิน เตอร์เ ฟสประเภท Listener ActionListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส ActionEvent AdjustmentListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของคลาส AdjustmentEvent ComponentListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของคลาส ComponentEvent ContainerListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของคลาส ContainerEvent FocusListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส FocusEvent
  17. 17. อิน เตอร์เ ฟสประเภท Listener ItemListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส ItemEvent KeyListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส KeyEvent MouseListener เป็น อิน เตอร์เ ฟสสำา หรับ ออปเจ็ค ของ คลาส MouseEvent MouseMotionListener เป็น อิน เตอร์เ ฟสสำา หรับ ออป เจ็ค ของคลาส MouseEvent
  18. 18. เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์ ่ เมธอดทีใ ช้ร ับ ฟัง ่ อิน เตอร์เ ฟส เหตุก ารณ์ActionListener addActionListener()ItemListener addItemListener()KeyListener addKeyListener()MouseListener addMouseListener()MouseMotionListener addMouseMotionListener()TextListener addTextListener()FocusListener addFocusListener()AdjustmentListener addAdjustmentListener()
  19. 19. เมธอดทีใ ช้ร ับ ฟัง เหตุก ารณ์ ่ เมธอดทีใ ช้ร ับ ฟัง ่ อิน เตอร์เ ฟส เหตุก ารณ์ComponentListener addComponentListener()ContainerListener addContainerListener()WindowListener addWindowListener()
  20. 20. เมธอดที่ต ้อ งลงทะเบีย นเมื่อ ต้อ งการ จัด การกับ เหตุก ารณ์ อิน เตอร์เ ฟส เมธอดทีต ้อ ง ่ implements keyPressed(KeyEvent)KeyListener keyReleased(KeyEvent) keyTyped(KeyEvent) focusGained(FocusEvent)FocusListener focusLost(FocusEvent) adjustmentValueChangedAdjustmentListener (AdjustmentEvent) componentMoved(ComponentEvent) componentHidden(ComponentEvent)ComponentListener componentResized(ComponentEvent) componentShown(ComponentEvent)
  21. 21. เมธอดที่ต ้อ ง implements อิน เตอร์เ ฟส เมธอดทีต ้อ ง ่ implementsActionListener actionPerformed(ActionEvent)ItemListener itemStateChanged(ItemEvent) mouseClicked(MouseEvent) mouseEntered(MouseEvent)MouseListener mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseMoved(MouseEvent)MouseMotionListener mouseDragged(MouseEvent)
  22. 22. เมธอดที่ต ้อ ง implements อิน เตอร์เ ฟส เมธอดทีต ้อ ง ่ implements keyPressed(KeyEvent)KeyListener keyReleased(KeyEvent) keyTyped(KeyEvent) focusGained(FocusEvent)FocusListener focusLost(FocusEvent) adjustmentValueChangedAdjustmentListener (AdjustmentEvent) componentMoved(ComponentEvent) componentHidden(ComponentEvent)ComponentListener componentResized(ComponentEvent) componentShown(ComponentEvent)
  23. 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. 24. การจัด การกับ เหตุก ารณ์ ภาษาจาวาจะมีว ิธ ีก ารจัด การกับ เหตุก ารณ์ท เ รีย ก ี่ ว่า Delegation Model โดยจะมีห ลัก การดัง นี้ • ออปเจ็ค ของส่ว นประกอบกราฟฟิก ใดๆสามารถเป็น ออปเจ็ค ประเภท Event Source ได้ อาทิเ ช่น ออปเจ็ค ของคลาส Button สามารถเป็น Event Source ของ ActionEvent ได้ • คลาสใดๆสามารถรับ ฟัง เหตุก ารณ์ใ ดๆก็ไ ด้ ถ้า คลาสนั้น implements อิน เตอร์เ ฟสประเภท Listener ที่ส อดคล้อ งกัน อาทิเ ช่น คลาสที่ต ้อ งการรับ ฟัง เหตุก ารณ์ ActionEvent จะต้อ ง implements อิน เตอร์เ ฟสที่ช ื่อ ActionListener • ออปเจ็ค ประเภท Event ที่เ กิด จาก Event Source จะถูก ส่ง ไปยัง ออปเจ็ค ของคลาสที่ส ามารถรับ ฟัง เหตุก ารณ์ ประเภทนั้น
  25. 25. ออปเจ็ค ของคลาสประเภท Event Handler Event Source ใดต้อ งการทีจ ะจัด การกับ ่ เหตุก ารณ์ใ ดต้อ งลงทะเบีย นเพื่อ รับ ฟัง เหตุก ารณ์ โดยมีร ูป แบบดัง นี้ eventSource.addXxxListener(listener) เราสามารถสร้า งออปเจ็ค ของคลาสประเภท Event Handler ได้ห ลายรูป แบบดัง นี้ • กำา หนดคลาสภายนอกคลาสที่ใ ช้ใ นการจัด การ เหตุก ารณ์ • กำา หนดคลาสที่เ ป็น คลาสภายในอยู่ใ นคลาสที่ใ ช้ใ นการ จัด การเหตุก ารณ์ • กำา หนดให้ค ลาสที่ใ ช้ใ นการจัด การเหตุก ารณ์ implements อิน เตอร์เ ฟสประเภท Listener ที่ส อดคล้อ งกัน และสร้า งออปเจ็ค ของคลาสดัง กล่า วภายในคลาสเอง • กำา หนดคลาสภายในเมธอด (คลาสประเภท
  26. 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. 27. คำา อธิบ ายโปรแกรม คลาส EventDemo1 มีป ุ่ม ที่ช อ bn1 ซึ่ง ลงทะเบีย นรับ ฟัง ื่ เหตุก ารณ์ป ระเภท ActionEvent จากคำา สั่ง bn1.addActionListener(new ActionHandler()); คำา สั่ง new ActionHandler()เป็น การสร้า งออปเจ็ค ทีใ ช้ ่ ในการจัด การกับ เหตุก ารณ์ป ระเภท ActionEvent คลาส ActionHandler จะต้อ ง implements อิน เตอร์เ ฟส ชื่อ ActionListener เมธอดทีต ้อ ง implements ่ ในคลาสคือ public void actionPerformed(ActionEvent ev)
  28. 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. 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. 30. คำา อธิบ ายโปรแกรม ตัว อย่า งโปรแกรม EventDemo2 มีก ารขึ้น ทะ เบีย นออปเจ็ค ของคลาส Frame เพือ รับ ฟัง ่ เหตุก ารณ์ MouseEvent จากคำา สั่ง fr.addMouseMotionListener(new MouseHandler()); โปรแกรมนี้จ ะแสดงตำา แหน่ง ของเมาส์เ มือ มีก าร ่ เลื่อ นเมาส์ คลาส MouseHandler เป็น คลาสภายใน ทำา ให้ สามารถเรีย กใช้ค ุณ ลัก ษณะของคลาส EventDemo2 ไ ด้ เช่น ออปเจ็ค tf ของคลาส TextField
  31. 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. 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. 33. คำา อธิบ ายโปรแกรม this หมายถึง ออปเจ็ค ของคลาสเดีย วกัน ตัว อย่า งโปรแกรมใช้อ อปเจ็ค this ในการจัด การ กับ WindowEvent จากคำา สั่ง fr.addWindowListener(this); คลาส EventDemo3 ต้อ ง implements อิน เตอร์เ ฟส WindowListener คำา สั่ง System.exit(0); ใน เมธอด windowClosing()ทำา ให้ส ามารถออกจากโปรแกรมได้ โดยการคลิก เมาส์ท เ ครื่อ งหมายกากบาทตรง ี่ Title Bar
  34. 34. การรับ ฟัง เหตุก ารณ์ห ลาย เหตุก ารณ์ Event Source สามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง ่ เหตุก ารณ์ห ลายประเภทได้ เช่น • fr.addMouseMotionListener(this); • fr.addWindowListener(this); คลาสใดๆสามารถ implements อิน เตอร์เ ฟสหลาย ตัว ได้ เช่น • public class EventDemo4 implements MouseMotionListener, WindowListener EventHandler สามารถทีจ ะจัด การกับ Event ่ Source ได้ห ลายตัว และ ออปเจ็ค ของคลาส ประเภท Event จะมีเ มธอดในการทีจ ะแยก Event ่ Source ได้
  35. 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. 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. 37. คลาสประเภท Event Adapter คลาสประเภท Event Adapter คือ คลาสที่ไ ด้ implements อิน เตอร์เ ฟส ประเภท Listener ไว้แ ล้ว คลาสประเภท Event Adapter นัน ได้ก ำา หนด ้ เมธอดต่า งๆของอิน เตอร์เ ฟสทีต ้อ งเขีย น ไว้แ ล้ว ่ แต่จ ะเป็น บล็อ กคำา สัง ทีไ ม่ม ค ำา สัง ใดๆอยูภ ายใน ่ ่ ี ่ ่ บล็อ ก คลาสประเภท Event Adapter จะช่ว ยทำา ให้เ ขีย น โปรแกรมทีเ ป็น คลาส ประเภท Event Handler ได้ ่ ง่า ยขึ้น โดยลดจำา นวนเมธอดทีจ ะต้อ งเขีย นบล็อ ก ่ คำา สั่ง
  38. 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. 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. 40. การสร้า งคลาสแบบ anonymous เราสามารถกำา หนดคลาสทัง หมดให้อ ยู่ภ ายใน ้ เมธอดทีเ รีย กใช้ง าน ่ คลาสประเภทนีเ รีย กว่า คลาสประเภท ้ anonymous คลาสประเภท anonymous นิย มใช้ใ นการ จัด การ กับ Event เช่น การปิด Frame
  41. 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. 42. สรุป เนื้อ หาของบท ออปเจ็ค ของคลาสประเภท Event ในแพจเก็จ java.awt.event จะถูก สร้า งขึ้น เมือ มีก ารกระทำา บาง ่ อย่า งเกิด ขึ้น กับ ตัว ใส่ส ว นประกอบหรือ ส่ว น ่ ประกอบกราฟฟิก เช่น ActionEvent เกิด ขึ้น เมือ มี ่ การกด Button หรือ WindowEvent เกิด ขึ้น เมือ มีก ารปิด ่ Frame การจะจัด การกับ Event ประเภทใดนัน โดยทัว ไป ้ ่ จะต้อ งสร้า งออปเจ็ค ของคลาสที่ implements อิน เตอร์เ ฟสทีส อดคล้อ งกัน กับ Event นัน ด้ว ย เช่น ่ ้ ถ้า ต้อ งการจัด การกับ WindowEvent จะต้อ งสร้า งออป เจ็ค ของคลาสที่ implements อิน เตอร์เ ฟส WindowListener โดยการสร้า งออปเจ็ค อาจสร้า งจาก คลาสภายนอก คลาสภายใน คลาสเดีย วกัน หรือ
  43. 43. สรุป เนื้อ หาของบท คลาสใดๆสามารถ implements อิน เตอร์เ ฟสได้ห ลาย ตัว ทำา ให้ส ามารถทีจ ะขึ้น ทะเบีย นรับ ฟัง เหตุก ารณ์ ่ ได้ห ลายเหตุก ารณ์ คลาสประเภท Event Adapter คือ คลาสที่ไ ด้ implements อิน เตอร์เ ฟส ประเภท Listener ไว้แ ล้ว โดยได้ก ำา หนดเมธอดต่า งๆของอิน เตอร์เ ฟสทีต ้อ ง ่ เขีย น ไว้แ ล้ว แต่จ ะเป็น บล็อ กคำา สั่ง ทีไ ม่ม ค ำา สั่ง ใดๆ ่ ี อยูภ ายในบล็อ ก ่
  44. 44. แบบฝึก หัด ข้อ ที่ 1 • ทดลองเขีย นโปรแกรมจัด การเหตุก ารณ์เ พื่อ ทำา ให้ โปรแกรม GUI ในแบบฝึก หัด บทที่ 6 ให้ส ามารถทำา งาน ได้อ ย่า งถูก ต้อ ง

×