Συμβάντα

Αφού δημιουργηθεί μια εμφάνιση και ορισμένα όργανα και γίνει εκκίνηση του βρόχου μηνύματος αυτής της εφαρμογής, πού διεξάγετε η πραγματική εργασία; Συμβαίνει κάθε φορά που γίνεται ανάγνωση ενός συμβάντος από την ουρά και αποστολή του σε ένα όργανο. Η λογική της εφαρμογής υλοποιείται κυρίως στις απαντήσεις σε συμβάντα χρήστη.

Το βασικό μοτίβο είναι η προσθήκη μιας λειτουργίας ακρόασης σε ένα όργανα που έχετε δημιουργήσει, ώστε όταν πραγματοποιείται το κατάλληλο συμβάν να εκτελείται ο κωδικός της λειτουργίας ακρόασης. Αυτό τό απλό παράδειγμα έχει τροποποιηθεί από το 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);