Αφού δημιουργηθεί μια εμφάνιση και ορισμένα όργανα και γίνει εκκίνηση του βρόχου μηνύματος αυτής της εφαρμογής, πού διεξάγετε η πραγματική εργασία; Συμβαίνει κάθε φορά που γίνεται ανάγνωση ενός συμβάντος από την ουρά και αποστολή του σε ένα όργανο. Η λογική της εφαρμογής υλοποιείται κυρίως στις απαντήσεις σε συμβάντα χρήστη.
Το βασικό μοτίβο είναι η προσθήκη μιας λειτουργίας ακρόασης σε ένα όργανα που έχετε δημιουργήσει, ώστε όταν πραγματοποιείται το κατάλληλο συμβάν να εκτελείται ο κωδικός της λειτουργίας ακρόασης. Αυτό τό απλό παράδειγμα έχει τροποποιηθεί από το org.eclipse.swt.examples.helloworld.HelloWorld3:
Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); ... shell.addControlListener (new ControlAdapter () { public void controlResized (ControlEvent e) { label.setBounds (shell.getClientArea ()); } });
Για κάθε είδους λειτουργία ακρόασης, υπάρχει μια διεπαφή που την ορίζει (XyzΛειτουργία ακρόασης), μια κλάση που παρέχει πληροφορίες συμβάντος (XyzΣυμβάν), και μια μέθοδος API για την προσθήκη της λειτουργίας ακρόασης (προσθήκηXyzλειτουργία ακρόασης). Αν έχουν ορισθεί περισσότερες από μία μέθοδοι στη διεπαφή της λειτουργίας ακρόασης τότε υπάρχει ένας προσαρμογέας (Xyzπροσαρμογέας) που υλοποιεί τη διεπαφή της λειτουργίας ακράσης και παρέχει κενές μεθόδους. Όλα τα συμβάντα, οι λειτουργίες ακρόασης και οι προσαρμογείς έχουν ορισθεί στο πακέτο org.eclipse.swt.events.
Οι ακόλουθοι πίνακες συνοψίζουν τα συμβάντα που είναι διαθέσιμα και τα όργανα που υποστηρίζουν κάθε συμβάν. Τα συμβάντα μπορούν να διαιρεθούν σε δύο γενικές κατηγορίες: συμβάντα υψηλού επιπέδου που αντιπροσωπεύουν μια λογική λειτουργία σε ένα στοιχείο ελέγχου και συμβάντα χαμηλού επιπέδου που περιγράφουν πιο συγκεκριμένες αλληλεπιδράσεις χρήστη. Τα συμβάντα υψηλού επιπέδου είναι δυνατό να αντιπροσωπεύονται από πολλά συμβάντα χαμηλού επιπέδου τα οποία μπορεί να διαφοροποιούνται σε κάθε πλατφόρμα. Τα συμβάντα χαμηλού επιπέδου πρέπει γενικά να χρησιμοποιούνται μόνο για υλοποιήσεις προσαρμοσμένων οργάνων.
Είδος συμβάντος |
Περιγραφή |
---|---|
Activate, Deactivate | Δημιουργούνται όταν ένα στοιχείο ελέγχου έχει ενεργοποιηθεί ή απενεργοποιηθεί. |
Arm | Το MenuItem είναι έτοιμο (έχει επισημανθεί και είναι έτοιμο για επιλογή). |
Close | Πρόκειται να κλείσει ένα κέλυφος όπως ζητήθηκε από τη λειτουργία διαχείρισης του παραθύρου. |
DefaultSelection | Ο χρήστης επιλέγει ένα στοιχείο καλώντας μια ενέργεια προεπιλεγμένης επιλογής. Για παράδειγμα, πατώντας "Καταχώρηση" ή διπλοπατώντας σε μια γραμμή ενός "Πίνακα". |
Dispose | Πρόκειται να γίνει αποδέσμευση ενός οργάνου, είτε μέσω προγράμματος είτε από τον χρήστη. |
DragDetect | Ο χρήστης έχει εκκινήσει μια πιθανή λειτουργία τραβήγματος. |
EraseItem | Το φόντο ενός TableItem ή ενός TreeItem πρόκειται να σχεδιαστεί. |
Expand, Collapse | Ένα στοιχείο σε μια διακλάδωση έχει επεκταθεί ή έχει συμπτυχθεί. |
Help | Ο χρήστης έχει ζητήσει βοήθεια για ένα όργανο. Για παράδειγμα, αυτό συμβαίνει όταν το πλήκτρο F1 είναι πατημένο σε περιβάλλον Windows. |
Iconify, Deiconify | Έχει γίνει ελαχιστοποίηση, μεγιστοποίηση ή επαναφορά ενός κελύφους. |
MeasureItem | Το μέγεθος ενός προσαρμοσμένου και σχεδιασμένου TableItem έχει ζητηθεί. |
MenuDetect | Ο χρήστης έχει ζητήσει ένα μενού περιβάλλοντος. |
Modify | Το κείμενο του οργάνου έχει τροποποιηθεί. |
Move, Resize | Ένα στοιχείο ελέγχου έχει αλλάξει θέση ή μέγεθος, είτε μέσω προγράμματος είτε από το χρήστη. |
PaintItem | Το προσκήνιο ενός TableItem ή ενός TreeItem πρόκειται να σχεδιαστεί. |
Selection | Ο χρήστης επιλέγει ένα στοιχείο ελέγχου. Για παράδειγμα, με μονό πάτημα σε μια γραμμή πίνακα ή με πλοήγηση στα στοιχεία με τη βοήθεια του πληκτρολογίου. |
SetData | Τα δεδομένα χρειάζεται να ρυθμιστούν σε ένα TableItem κατά τη χρήση ενός εικονικού πίνακα. |
Settings | Μια ιδιότητα του λειτουργικού συστήματος, όπως μια γραμματοσειρά ή ένα χρώμα του συστήματος, έχει αλλάξει. |
Show, Hide | Η ορατότητα ενός στοιχείου ελέγχου έχει αλλάξει. |
Traverse | Ο χρήστης επιχειρεί διάσχιση εκτός του στοιχείου ελέγχου με πάτημα πλήκτρου. Για παράδειγμα, τα πλήκτρα "escape" ή "tab" χρησιμοποιούνται για διάσχιση. |
Verify | Το κείμενο ενός οργάνου πρόκειται να τροποποιηθεί. Το συμβάν αυτό δίνει στην εφαρμογή την ευκαιρία να αλλάξει το κείμενο ή να αποτρέψει την τροποποίηση. |
Είδος συμβάντος |
Περιγραφή |
---|---|
FocusIn, FocusOut | Σε ένα στοιχείο ελέγχου έχει αυξηθεί ή μειωθεί η εστίαση. |
KeyDown, KeyUp | Ο χρήστης έχει πατήσει ή αφήσει ένα πλήκτρο πληκτρολογίου, όταν το στοιχείο ελέγχου έχει εστίαση πληκτρολογίου. |
MouseDown, MouseUp, MouseDoubleClick | Ο χρήστης έχει πατήσει ή αφήσει ή διπλοπατήσει το ποντίκι πάνω από το στοιχείο ελέγχου. |
MouseMove | Ο χρήστης έχει μετακινήσει το ποντίκι πάνω από το στοιχείο ελέγχου. |
MouseEnter, MouseExit, MouseHover | Το ποντίκι έχει εισέλθει, εξέλθει ή βρίσκεται πάνω από το στοιχείο ελέγχου. |
MouseWheel | Έχει γίνει περιστροφή του τροχού του ποντικιού. |
Paint | Το στοιχείο ελέγχου έχει καταστραφεί και χρειάζεται επαναχρωματισμό. |
Σε συνδυασμό με το σύστημα τυποποιημένων συμβάντων που περιγράφεται παραπάνω, το SWT υποστηρίζει έναν μηχανισμό μη τυποποιημένων και χαμηλού επιπέδου συμβάντων οργάνου. Ο μηχανισμός μη τυποποιημένων συμβάντων βασίζεται σε μια σταθερά για τον προσδιορισμό του είδους των συμβάντων και ορίζει μια γενική λειτουργία ακρόασης που παρέχεται με αυτή τη σταθερά. Αυτό επιτρέπει στη λειτουργία ακρόασης να υλοποιήσει μια λειτουργία ακρόασης "για κάθε περίπτωση". Στο ακόλουθο τμήμα κώδικα, ορίζουμε μια γενική ρουτίνα χειρισμού συμβάντων και προσθέτουμε διάφορες λειτουργίες ακρόασης σε ένα κέλυφος.
Shell shell = new Shell (); Listener listener = new Listener () { public void handleEvent(Event e) { switch (e.type) { case SWT.Resize: System.out.println ("Resize received"); break; case SWT.Paint: System.out.println ("Paint received"); break; default: System.out.println ("Unknown event received"); } } }; shell.addListener (SWT.Resize, listener); shell.addListener (SWT.Paint, listener);