เรามาเริ่มมมมม กันเลยครับบบ
Code ของ mouseevent2 ในส่วนของการทำงานจะเหมือนกับ mouseevent ทุกอย่างนะครับ แตกต่างกันตรงที่ใน mouseevent2 จะมี File
- MouseReceiver2BeanInfo.java
- MouseSource2BeanInfo.java
เพิ่มเข้ามาและ 2 File นี้เป็นตัวที่ทำให้ Properties ของ Bean ที่เราไม่ต้องการถูกซ้อนไปได้ครับ จะเริ่มอธิบายได้จาก source code ดังนี้ครับบ
File -> MouseSource2BeanInfo.java
return esd;package mouseevents2;import java.beans.*;import java.awt.event.*;import java.lang.reflect.*;public class MouseSource2BeanInfo extends SimpleBeanInfo {public PropertyDescriptor[] getPropertyDescriptors() {PropertyDescriptor pds[] = { };return pds;}public EventSetDescriptor[] getEventSetDescriptors() {try {EventSetDescriptor esd1, esd2;String mnames[] = { "mouseClicked", "mouseEntered","mouseExited", "mousePressed", "mouseReleased" };esd1 = new EventSetDescriptor(MouseSource2.class,"mouse", MouseListener.class, mnames,"addMouseListener", "removeMouseListener");String mmnames[] = { "mouseDragged", "mouseMoved" };esd2 = new EventSetDescriptor(MouseSource2.class,"mouseMotion", MouseMotionListener.class, mmnames,"addMouseMotionListener", "removeMouseMotionListener");EventSetDescriptor esd[] = { esd1, esd2 };}catch(Exception ex) {ex.printStackTrace();}return null;}public MethodDescriptor[] getMethodDescriptors() {MethodDescriptor mds[] = { };return mds;}}จาก Code จะเห็นได้ว่าเราจะทำการกำหนด Event ที่ต้องการให้ Bean แสดงโดยให้ดูในส่วนของ method public EventSetDescriptor[] getEventSetDescriptors()จะเป็นการเขียนสร้าง array ของ String และ new Object ชื่อ EventSetDescriptor โดยตั้งชื่อว่า esd1 และ esd2 (ตัวที่ hilight สีแดง) และทำการสร้าง EventSetDescriptor esd[] = { esd1, esd2 }; (บรรทัดที่ hilight สีเขียว) และทำการ return esd ทั้งหมดที่เรารวมไว้แล้วกลับไปครับ เท่านี้ก็จะทำให้เราผลดังภาพ แล้วครับต่อไปจะเป็นส่วนของ FileFile -> MouseReceiver2BeanInfo.javapackage mouseevents2;import java.beans.*;import java.awt.event.*;import java.lang.reflect.*;public class MouseReceiver2BeanInfo extends SimpleBeanInfo {public EventSetDescriptor[] getEventSetDescriptors() {
PropertyDescriptor pds[] = { };return pds;}public EventSetDescriptor[] getEventSetDescriptors() {EventSetDescriptor esds[] = { };return esds;}public MethodDescriptor[] getMethodDescriptors() {try {Class c = MouseReceiver2.class;Class pTypes[] = new Class[1];pTypes[0] = MouseEvent.class;Method method1 = c.getMethod("mouseClicked", pTypes);Method method2 = c.getMethod("mouseEntered", pTypes);Method method3 = c.getMethod("mouseExited", pTypes);Method method4 = c.getMethod("mousePressed", pTypes);Method method5 = c.getMethod("mouseReleased", pTypes);Method method6 = c.getMethod("mouseDragged", pTypes);Method method7 = c.getMethod("mouseMoved", pTypes);ParameterDescriptor pds[] = new ParameterDescriptor[1];pds[0] = new ParameterDescriptor();MethodDescriptor md1 = new MethodDescriptor(method1, pds);MethodDescriptor md2 = new MethodDescriptor(method2, pds);MethodDescriptor md3 = new MethodDescriptor(method3, pds);MethodDescriptor md4 = new MethodDescriptor(method4, pds);MethodDescriptor md5 = new MethodDescriptor(method5, pds);MethodDescriptor md6 = new MethodDescriptor(method6, pds);MethodDescriptor md7 = new MethodDescriptor(method7, pds);MethodDescriptor mds[] = { md1, md2, md3, md4,md5, md6, md7 };return mds;}catch(Exception ex) {ex.printStackTrace();}return null;}}จาก Code ใน File นี้จะเป็นการซ้อน Event ทั้งหมดของ Bean ที่เราไม่ต้องการ โดยจะสังเกตุได้ว่า ใน methodpublic EventSetDescriptor[] getEventSetDescriptors() {
EventSetDescriptor esds[] = { };
return esds;
}
จะเป็นการ return esds เปล่าๆกลับไปโดยไม่มีการสร้าง EventSetDescriptor ใดๆนะครับ ทำให้ได้ผลดังภาพครับ

ที่เห็นใน Method public MethodDescriptor[] getMethodDescriptors()
นี้จะเป็นส่วนสำหรับเมื่อมี Component ใดๆมา ทำการ สร้าง Event กับตัว Receiver นี้ จะให้ตัว Receiver นี้ทำการแสดง ข้อความดังที่ตั้งไว้ในแต่ละ
pTypes[0] = MouseEvent.class;
Method method1 = c.getMethod("mouseClicked", pTypes);
ดังเช่น ตัวอย่างให้ MouseSource2 ทำการ สร้าง Event กับ MouseReceiver2 โดยเลือกเป็น mouseClicked ครับ

เมื่อทำการ set event เสร็จเรียบร้อยเมื่อเรา คลิกลงบน mouseSource2 ใน mouseReceiver2 จะแสดงผลดังภาพครับ

เท่านี้ถ้าเพื่อนๆลองทำตาม หรือ อ่านๆ Code ดูก็คงจะพอเข้าใจสำหรับคำอธิบาย mouseevent2 นะครับ ^^!

ไม่มีความคิดเห็น:
แสดงความคิดเห็น