Contenu connexe
Similaire à ๋Java Programming [7/12] : GUI Event Handling (7)
Plus de IMC Institute (20)
๋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
- 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 ให้ส ามารถทำา งาน
ได้อ ย่า งถูก ต้อ ง