» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
קטעי קוד מענינים
דף ראשי  מתקדמים  Posting Synthetic Events to the System Event Queue  תוכנית דוגמא  קטעי קוד מענינים גרסה להדפסה

 

קטעי קוד מענינים

 

הרבה מהחומר בתוכנית זו הוכלל ונכתב עליו בתוכניות דוגמא בשיעורים קודמים.חלקים אלו של קוד לא יודגשו כאן.

הקטע קוד הראשון שמעניין מורכב ממספר הצהרות מה-constructor שנדרשו כדי לתת אינסטנס לאובייקט מסוג   CustomComponent וליצור אובייקט מסוג  KeyListener  על רכיב זה.

הקוד שנראה לאחר מכן הוא קוד של אובייקט ה KeyListener שתופס את אובייקטי אירוע המפתח,ויוצר אובייקטי אירועי מפתח

מלאכותיים ושולח אותם לאובייקט ה CustomComponent.זאת הסיבה שתוכנית זאת יכולה להחשה כמיירטת אובייקטי אירוע

מפתח וממירה אותם לאובייקטי אירוע עכבר.

 

    CustomComponent myCustomComp = new CustomComponent();
    this.add(myCustomComp);
    ...
    myCustomComp.addKeyListener(
                        new MyKeyListener(myCustomComp));

 

 

 

 

 

 

 

קטע הקוד המעניין הבא הוא הצהרה בתוך מחלקת ה KeyListenerשיוצרת אובייקט אירוע עכבר מלאכותי ושולחת אותו לתור

אירועי המערכת.כמו שאתה יכול לראות הsyntax של הצהרה זו הוא די מסובך.

מוקדם יותר בשיעור זה, סיפקנו הגדרה עבור כל פרמטר בconstructor של אירוע העכבר כדי שתוכל לקחת אותם.

לדוגמא,הפרמטר הראשון הוא myCustomComp שהוא משתנה התייחסות לרכיב הcustom.

הו הפרמטר שמתייחס לsource בתיאור הקודם.אתה צריך גם לזהות את הפרמטר השני כ MouseEvent.MOUSE_CLICKED שהוא אחר מהערכים האפשריים לid שהוצגו קודם לכן.

 

Toolkit.getDefaultToolkit().
     getSystemEventQueue().
     postEvent(new MouseEvent(myCustomComp,
                              MouseEvent.MOUSE_CLICKED,0,0,
                              -1,-1,2,false));

 

 

 

 

 

 

 

כמו שהזכרנו קודם,ערך ההתחלה של  הקוארדינטות x וy הוא 1- כדי לזהות אובייקט מסוג זה בקלות כאשר הם מגיעים

למתודה processMouseEvent() (אירועי ה"קליק" האמיתיים בעלי קוארדינטות שליליות).

התיעוד הטוב ביותר (והיחיד) בהתייחס לשארית הsyntax נמצא ב Specification AWT Enhancements Design

תחת Delegation Event Model בחלק תחת הכותרת The Event Queue.

אתה יכול להוריד מסמך זה מjavasoft או לקרוא אותו אינטראקטיבית.

החלק הזה (שהוא כל התיעוד שהצלחתי לאתר על נושא זה) חוזרים עליו שוב בהמשך לצורך הבנתו בצורה ברורה.

 

 

The Event Queue 

Another feature of the 1.1 event model is the addition of an event queue class:  

     java.awt.EventQueue

This class provides a number of public instance methods to manipulate the queue:  

     public synchronized void postEvent(AWTEvent e)

     public synchronized AWTEvent getNextEvent()

     public synchronized AWTEvent peekEvent()

     public synchronized AWTEvent peekEvent(int eventID)

Programs can actually use this class to instantiate their own event
queue instances for the purpose of asynchronously posting events.
The EventQueue class automatically instantiates an internal thread for
dispatching the events appropriately. 
 

In the default JDK implementation, all events generated on components
are first posted to a special "system" EventQueue instance before being
dispatched to their target component. 
 

The Toolkit class provides a method to access the handle of the system EventQueue instance:  

     public final EventQueue getSystemEventQueue()

It would obviously be a security problem to allow untrusted applets
to freely manipulate the system event queue,
therefore the getSystemEventQueue() method is
protected by a SecurityManager check which disallows applets direct access to the system queue.
We realize that applets would also like access to an event queue which is scoped to their own
containment hierarchies and we are working on an architecture to allow that for a follow-on release. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

נקווה שהאנשים מjavasoft לא יכעסו שלקחנו מידע זה מילה במילה מהמדריך.

 

הקטע קוד המעניין הבא הוא הצהרה בתוך הconstructor של מחלקת ה .CustomComponentראינו הצהרה זו בעבר

והיא חוזרת כאן לצורך הדגשה.הצהרה זו דרושה לצורך השלטת מתודת הprocessMouseEvent() כדי שתופעל בכל פעם

שנשלח אירוע עכבר אל אובייקט של מחלקת הCustomComponent .

 

    enableEvents(AWTEvent.MOUSE_EVENT_MASK ); 

 

 

 

הקטע קוד המעניין האחרון היא המתודה המושלטת processMouseEvent()  שמכריזה שהמתודה הופעלה

ומציגה את ערך הid ואת ערכי הקוארדינטות מהאובייקט.

ציין לעצמך שוב את הקריאה למתודה super.processMouseEvent() בסוף המתודה.אם שכחת לעשות זאת התוצאה תהייה

    לא צפוייה ובדרך כלל לא טובה.

 

  public void processMouseEvent(MouseEvent e) {
    System.out.println(
      "In processMouseEvent in CustomComponent. ID = " 
                     + e.getID() + " " + e.getPoint());
    //ALWAYS DO THIS IF YOU OVERRIDE the method.
    super.processMouseEvent(e);
  }//end processMouseEvent 

 

 

 

 

 

 

 

 

 

כל מה שנשאר זה  מחלקת WindowListener   הסטנדרטית,מחלקה שראינו מספר פעמים בעבר.

קטע הקוד דימה חלקים מהותיים ביצירת ושליחת אירועים מלאכותיים.

 31-10-03 / 15:15  נוצר ע"י רונית רייכמן  בתאריך 
 תוכנית דוגמא - הקודםהבא - תיעוד התוכנית 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 5