17. การจัดการอีเวนท์(Event Handling)

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

17. การจัดการอีเวนท์(Event Handling)

 

            หลังจากสามารถสร้าง GUI ให้ได้หน้าต่างแบบที่ต้องการเป็นที่เรียบร้อยก็จะพบว่าเมื่อรันโปรแกรมจะปรากฏหน้าจอ GUI ขึ้นมาก็จริงแต่ไม่สามารถตอบสนองได้ เช่น กดปุ่มก็ไม่เกิดอะไรขึ้น นั่นก็เป็นเพราะว่ายังไม่ได้มีการกำหนดหน้าที่ของคอมโพเนนท์ต่างๆใน GUI ซึ่งการจะกำหนดการกระทำต่างๆให้ GUI เรียกว่าการจัดการกับอีเวนท์ หรือ Event Handling

การจัดการกับอีเวนท์

            Event แปลว่าเหตุการณ์ ซึ่งหมายถึงเหตุการณ์ต่างๆที่เกิดขึ้นกับโปรแกรม เช่น เกิดเหตุการณ์คลิ๊กโดยเมาส์ การกดปุ่มที่แป้นพิมพ์ (เช่นปุ่ม Enter) แต่การสร้าง GUI เฉยๆไม่ได้กำหนดการรับมือกับเหตุการณ์ต่างๆหากอยากให้โปรแกรมใช้งานได้ก็ต้องรับมือกับอีเวนท์ด้วย ซึ่งก่อนอื่นควรทำความรู้จักกับอีวเนท์ประเภทต่างๆก่อน ซึ่งจะแนะนำจาก ประเภทอีเวนท์ว่าอีเวนท์นั้นๆใช้ทำอะไร โดยจะ new anonymous inner class ของอินเตอร์เฟซใดและใช้เมท็อดอะไร

1.ActionEvent

การใช้งาน : อีเวนท์นี้มีไว้สำหรับจัดการกับการคลิ๊ก JButton และ  การใช้ปุ่ม Enter การดับเบิลคลิ๊กและการเลือกใน MenuItem

อินเตอร์เฟซ : ActionListener

เมท็อด : actionPerformed(ActionEvent)

2.ComponentEvent

การใช้งาน : เป็นตัวบอกให้รู้ว่าใช้คอมโพเนนท์อะไรบ้าง

อินเตอร์เฟซ : ComponentListener

เมท็อด : componentMoved(ComponenEvent), componentHidden(ComponenEvent), componentShow(ComponenEvent)

3.ContainerEven

การใช้งาน :สำหรับการเพิ่มและลบคอนเทนเนอร์

อินเตอร์เฟซ : ContainerListener

เมท็อด : componentAdded(ContainerEvent), componentRemoved(ContainerEvent),

4.FocusEvent

การใช้งาน : เมื่อผู้ใช้เลื่อนอุปกรณ์อินพุตมาชี้ยังอ็อปเจ็คของส่วนประกอบกราฟฟิกใดๆ

อินเตอร์เฟซ : FocusListener

เมท็อด : focusGained(FocusEvent), focusLost(FocusEvent)

5.ItemEvent

การใช้งาน : เมื่อทำการเลือกรายการใน List หรือ Checkbox

อินเตอร์เฟซ : ItemListener

เมท็อด : itemStateChaned(ItemEvent)

6.KeyEvent

การใช้งาน : เมื่อการทำงานเกี่ยวข้องแป้นพิมพ์

อินเตอร์เฟซ : KeyListener

เมท็อด : keyPressed(KeyEvent), keyReleased(KeyEvent), keyTyped(KeyEvent),

7.MouseEvent

การใช้งาน : เมื่อต้องการใช้งาน คลิ๊ก(clicked) เคลื่อนที่(moved) ลากวาง(dragged) โดยใช้ได้กับ JButton JCheckboc, JScrollPane, JTextField เป็นต้น

อินเตอร์เฟซ : MouseListener

เมท็อด : mousePressed(MouseEvent) กดค้างไว้, mouseReleased(MouseEvent) ปล่อยเมาส์, mouseClicked(MouseEvent) คลิ๊กเมาส์

8.MouseMotionEvent

การใช้งาน : คล้ายกับ 7

อินเตอร์เฟซ : MouseMotionListener

เมท็อด : mouseDragged(MouseEvent), mouseMoved(MouseEvent),

การใช้งาน

            ขั้นแรกต้องรู้ก่อนว่าต้องการให้คอมโพเนนท์ใดทำงาน เช่น ง่ายๆและใช้บ่อยๆเลยก็คือปุ่ม(JButton) ก็ต้องนึกต่อไปอีกว่าจะให้ปุ่มทำงานอะไรได้ ก็เช่นคลิ๊กได้หรือกด Enter ก็ได้ด้วย

            ขั้นต่อมาก็ให้มาดูที่อีเวนต์ว่าว่ามีอีเวนต์ตัวไหนที่สามารถทำให้ปุ่มทำงานตามที่ต้องการได้บ้าง ให้เลือกให้เข้าคู่ถูกต้องกับการทำงาน

            ขั้นตอนการเรียกใช้อีเวนต์เป็นดังนี้

–          สร้างตัวแปรอ็อปเจ็คของคอมโพเนนท์(สร้างอยู่แล้วอัตโนมัติ ถ้าสร้างจาก WindowBuilder)

–          ให้อ็อปเจ็คนั้นเรียกเมท็อดที่ชื่อaddตามด้วยชื่อของอินเตอร์เฟส addxxxx(parameter) เช่น addActionListener

–          ภายในพารามิเตอร์ให้สร้าง anonymous inner class ของอินเตอร์เฟสและ อิมพลีเมนต์ เมท็อดของอินเตอร์เฟสให้ทำงานตามที่ต้องการ(จริงๆใช้งานได้หลายแบบแต่ที่นี้จะใช้แบบ anonymous inner classเพราะสามารถ generate ได้อัตโนมัติ)

แต่พูดไปแล้วอาจจะงงต้องลองดูตัวอย่างโครงสร้าง ซึ่งจะออกมาลักษณะนี้

ชื่อคลาสคอมโพเนนท์ ชื่อตัวแปรอ็อปเจ็ค = new ชื่อคลาสคอมโพเนนท์ (“text”);

                        ชื่อตัวแปรอ็อปเจ็ค.addอินเตอร์เฟส(new ชื่ออินเตอร์เฟส() {

                                    public void ชื่อเมท็อด(พารามิเตอร์แบบอ็อปเจ็ค) {

                                    }

                        });

                        ชื่อตัวแปรอ็อปเจ็ค.setBounds(x, y, width, height);

                        contentPane.add(ชื่อตัวแปรอ็อปเจ็ค);

x, y คือตำแหน่งตามแนวแกน x และ y , width, heightคือขนาดกว้างสูง

แต่การเขียนโค๊ตเหล่านี้ก็ไม่จำเป็นเพราะ WindowBuilder สามารถ generate ให้ได้อัตโนมัติอีกเช่นเดียวกัน แต่สิ่งควรรู้คือตำแหน่งสำหรับการ อิมพลีเมนท์เมท็อด

วิธีจัดการอีเวนต์ด้วย WindowBuilder

1.      เอาเมาส์ชี้ไปที่คอมโพเนนท์ที่ต้องการจัดการกับอีเวนต์ จากนั้นให้คลิ๊กขวา จะมีคำว่า Add event handler ให้เลือกอันนี้

 

รูป17-1

เมื่อเลือกที่ Add event handlerจะปรากฏให้เลือกมาต้องการทำอะไร ใช้เมท็อดอะไรดังรูป

 

รูป17-2

เมื่อเลือกให้ทำอะไรแล้วโค๊ตก็จะมาปรากฏในหน้า source

 

รูป17-3

ตัวอย่างการใช้งาน

จะสาธิตตัวอย่างการใช้งานอย่างง่ายที่สุดนั่นคือ จะเขียนโปรแกรมให้ผู้ใช้กรอกข้อความเข้ามา จากนั้นให้มี JDialog ทักทายตอบออกไป

เริ่มจากสร้าง GUI สำหรับช่องกรอกชื่อ และปุ่มสำหรับ Enter

 

รูป17-4

จัดการกับอีเวนต์ของปุ่ม Enter ด้วย ActionListener

 

 

รูป17-5

ทำการอิมพลีเมนท์เมท็อด actionPerformed  ด้วยการให้แสดง JDialog ออกมาเมื่อมีการคลิ๊กหรือ Enter ที่ปุ่มนี้ โดยให้แสดงข้อความ Hello แล้วตามด้วยชื่อที่ผู้ใช้ได้หรอกเข้ามาโดย getText() มาจากช่อง JTextField ที่สร้างไว้

 

รูป17-6

ผลลัพธ์ที่ได้ คือเมื่อกดปุ่มจะมี Dialog ขึ้นมา ถ้าไม่ทำการจัดการกับอีเวนต์เวลากดปุ่มก็จะไม่ได้เกิดอะไร

 

รูป 17-7

 

 

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

ใส่ความเห็น