อันดับแรกเรามาทำความรู้จักกับ Introspection กันก่อน ว่ามันคืออะไร ใช้เพื่ออะไร ทำงานอย่างไร?
Introspection คืออะไร ?
Introspection เป็นกลไกของ Java Bean อย่างนึง ซึ่งปกติแล้ว Java จะมี Introspection Class อยู่ใน Bean Package อยู่แล้ว
เราใช้มันเพื่ออะไร ?
เราจะใช้ Introspection เพื่อจะให้เรามี Method ที่เป็น static method เพื่อทำให้เราสามารถดึงข้อมูลจาก Properties , methods , events หรือที่เรียกสั้นๆว่า " P M E " ขึ้นมาใช้งานได้
Introspection ทำงานอย่างไร ?
หากเรามี bean ชื่อว่า Mybean และเราต้องการที่จะแสดงข้อมูล P M E ของ bean ในแบบของเราเองด้วย เราจะต้องสร้างไฟล์ .java ที่มีรูปแบบดังนี้
ชื่อbeanBeanInfo.java
ตัวอย่างเช่น หาก bean ชื่อว่า Mybean จะต้องสร้างไฟล์ .java ขึ้นมาชื่อว่า MybeanBeanInfo.java
การทำงานของ BeanInfo คือ จะเป็นเพียงแค่ข้อกำหนด BeanInfo ไม่ใช่ Bean BeanInfo เป็นเพียงแค่ข้อมูลเกี่ยวกับ Beans นั้น และ Java Bean จะสร้าง Class จากข้อกำหนดนี้
*หมายเหตุ หากไม่มีไฟล์ BeanInfo Java Bean จะใช้เป็นค่า Default
Casestudy " Mouse events & Mouse events 2 "
อันดับแรกคลิกดาวน์โหลด mouseevents + mouseevents 2 : AllMouseevent.rar
จากนั้นหากการดาวน์โหลดเรียบร้อยจะได้ ไฟล์ชื่อ AllMouseevent.rar ภายในไฟล์นี้จะมี mouseevents และ mouseevents2
Mouseevents
ในภายโฟลเดอร์ mouseevents จะมีไฟล์
- mouseevent.mft
- mousereceiver.java
- mousesource.java
- mousereceiver.class
- mousesource.class
Step 1 ( เตรียมไฟล์ mouseevents )
- ให้ทำการ complie ไฟล์ mousereceiver.java , mousesource.java ตามวิธีที่ได้กล่าวมาแล้ว ( หากใครลืมคลิก วิธี compile เพื่อสร้าง jar file )
- จากนั้นหาก compile เสร็จเรียบร้อยจะได้โฟลเดอร์ mouseevents และภายในโฟลเดอร์นี้จะมีไฟล์ Mousereceiver.class และ Mousesource.class อยู่
- สร้าง file.jar จาก minifest file ที่ให้มา
- หากสร้างเสร็จเรียบร้อยจะได้ไฟล์ mouseevents.jar ซึ่งเป็นไฟล์ที่พร้อมใช้งานใน Beanbox แล้ว
- เปิด Beanbox แล้วให้โหลดไฟล์ mouseevents.jar เข้าสู่ Beanbox
- หากโหลดเรียบร้อยในหน้าต่าง ToolBox จะได้ MouseReceiver และ MouseSource มาอยู่ใน list
- ในหน้าต่าง Beanbox ให้นำเอา MouseReceiver และ MouseSource เข้ามา
- MouseReceiver ใช้สำหรับแสดงผลว่า MouseSource ทำอะไรบ้าง
- MouseSource เป็นตัวรับ event จาก User
รูปแสดง Event ของ MouseSource
รูปแสดง Event ของ MouseReceiver
- จะสร้างสัมพันธ์ระหว่าง MouseReceiver และ MouseSource โดยจะยกตัวอย่าง event เป็น mouseClicked

- หาก click ที่ MouseSorce แล้ว MouseReceiver จะปรากฏ event ที่เราได้สร้างความสัมพันธ์ไว้
Mouseevents2
ในภายโฟลเดอร์ mouseevents2 จะมีไฟล์
Step 1 ในการเตรียมไฟล์ Mouseevents2 เพื่อใช้ใน Beanbox นั้น สามารถทำวิธีเดียวกับการเตรียมไฟล์ Mouseevent ได้
Step 2
ในภายโฟลเดอร์ mouseevents2 จะมีไฟล์
- mouseevent2.mft
- Mousereceiver2.java
- Mousesource2.java
- Mousereceiver2BeanInfo.java
- Mousesource2BeanInfo.java
- Mousereceiver2.class
- Mousesource2.class
- Mousereceiver2BeanInfo.class
- Mousesource2BeanInfo.class
Step 1 ในการเตรียมไฟล์ Mouseevents2 เพื่อใช้ใน Beanbox นั้น สามารถทำวิธีเดียวกับการเตรียมไฟล์ Mouseevent ได้
Step 2
- การ LoadJar เข้ามาใน Beanbox สามารถทำวิธีเดียวกับ Mouseevent ได้
- หากโหลด mouseevents2.jar เข้ามาแล้ว ในหน้าต่างของ toolbox จะมี Mousereceiver2 และ Mousesource2 อยู่ใน list
- ในหน้าต่าง Beanbox ให้นำเอา MouseReceiver2 และ MouseSource2 เข้ามา
- หาคลิกเลือก Mousesource2 และ Mousereceiver2 ในหน้าต่าง Beanbox แล้ว คลิก Edit > Event จะเห็นได้ว่า ในส่วนของ Mousesource2 Event จะเหลือแค่ mouse , mouseMotion เท่านั้น และในส่วนของ Mousereceiver2 จะซ่อน event ไว้ทั้งหมด นั่นเป็นเพราะว่า Mouseevents2 นั้นใช้กลไกลของ Introspection นั่นเอง
รูปแสดง Event ของ Mousesource2
รูปแสดง Event ของ Mousereceiver2
สรุป
ความแตกต่างของ Mouseevents กับ Mouseevents2 คือ
- Mouseevents จะเป็น Bean ธรรมดาซึ่งไม่ได้นำกลไกของ Introspection มาใช้ ดังนั้น Java จึงใช้ค่า Default นั่นคือ เมื่อ LoadJar เข้ามาใน Beanbox แล้ว ทุก Properties จะถูกแสดงทั้งหมด
- Mouseevents2 เป็น Bean ที่ได้นำกลไกของ Introspection เข้ามาใช้ในส่วนของ Feature Descriptor นั่นคือใช้ EventDescriptor และ MethodDescriptor เพื่อที่จะแสดงแค่ Event ที่เราต้องการใช้เท่านั้น เมื่อ LoadJar เข้ามาใน Beanbox แล้ว จะแสดงเพียงแค่ Event ที่ต้องการให้แสดงเท่านั้น
ในส่วนของ ความแตกต่างของ Mouseevents และ Mouseevents2 ก็มีเพียงเท่านี้ ในตอนต่อไปมาติดตามกันว่าจะมีบทความดีๆเรื่องอะไร มาแชร์กันอีกนะคะ ขอบคุณที่ติดตามมาถึงจุดนี้ค่ะ .