วันอังคารที่ 2 สิงหาคม พ.ศ. 2554

รายละเอียดโปรแกรม mouseevent2

จากบทความด้านล่าง เพื่อนๆคงอยากจะรู้แล้วใช่ไหมครับว่าในตัวโปรแกรม mouseevent2 เนี้ยมันมีอะไรบ้างงง

เรามาเริ่มมมมม กันเลยครับบบ

Code ของ mouseevent2 ในส่วนของการทำงานจะเหมือนกับ mouseevent ทุกอย่างนะครับ แตกต่างกันตรงที่ใน mouseevent2 จะมี File
- MouseReceiver2BeanInfo.java
- MouseSource2BeanInfo.java

เพิ่มเข้ามาและ 2 File นี้เป็นตัวที่ทำให้ Properties ของ Bean ที่เราไม่ต้องการถูกซ้อนไปได้ครับ จะเริ่มอธิบายได้จาก source code ดังนี้ครับบ

File -> MouseSource2BeanInfo.java
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 };
return esd;
}
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 ทั้งหมดที่เรารวมไว้แล้วกลับไปครับ เท่านี้ก็จะทำให้เราผลดังภาพ แล้วครับ


ต่อไปจะเป็นส่วนของ File
File -> MouseReceiver2BeanInfo.java

package 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 ที่เราไม่ต้องการ โดยจะสังเกตุได้ว่า ใน method

public 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 นะครับ ^^!

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

แสดงความคิดเห็น