| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
swing:events [2020/03/17 06:36] gthanos [Παράδειγμα - Πιάνοντας ένα event μέσω ενός Event Listener] |
swing:events [2021/04/13 06:11] gthanos |
| Ο **//window manager//** δημιουργεί //events// για κάθε απειροελάχιστη μεταβολή της θέσης του ποντικιού ή για το πάτημα ενός κουμπιού από το πληκτρολόγιο. Τα περισσότερα προγράμματα δεν τα ενδιαφέρει το σύνολο των //events// που παράγονται. Προκειμένου ένα πρόγραμμα να μην "βομβαρδίζεται" με πολλά διαφορετικά events τα οποία του είναι αδιάφορα θα πρέπει να θεσπίσει του δικούς του κανόνες για το ποια events το ενδιαφέρουν. Η θέσπιση των κανόνων αυτών γίνεται μέσα από αντικείμενα τύπου event listeners, τα οποία ακούν σε συγκεκριμένου τύπου events. | Ο **//window manager//** δημιουργεί //events// για κάθε απειροελάχιστη μεταβολή της θέσης του ποντικιού ή για το πάτημα ενός κουμπιού από το πληκτρολόγιο. Τα περισσότερα προγράμματα δεν τα ενδιαφέρει το σύνολο των //events// που παράγονται. Προκειμένου ένα πρόγραμμα να μην "βομβαρδίζεται" με πολλά διαφορετικά events τα οποία του είναι αδιάφορα θα πρέπει να θεσπίσει του δικούς του κανόνες για το ποια events το ενδιαφέρουν. Η θέσπιση των κανόνων αυτών γίνεται μέσα από αντικείμενα τύπου event listeners, τα οποία ακούν σε συγκεκριμένου τύπου events. |
| |
| Θα πρέπει να τονίσουμε ότι υπάρχουν διαφορετικοί τύποι event για κάθε διαφορετικό τύπο αλληλεπίδρασης του χρήστη με το γραφικό περιβάλλον. Για παράδειγμα, η μετακίνηση του ποντικιού ή το πάτημα ενός κουμπιού από το ποντίκι παράγει ένα **MouseEvent** ενώ το πάτημα ενός κουμπιού ή η επιλογή ενός menu παράγει ένα **ActionEvent**. Επομένως, το κάθε πρόγραμμα θα πρέπει να θεσπίσει τους κατάλληλους event //listeners// που διαχειρίζονται τα event που παράγονται από τις οντότητες του γραφικού περιβάλλοντος που μας ενδιαφέρουν. Η διαδικασία διαχείρισης και αντίδρασης του προγράμματος σε ένα event, ονομάζεται //**event handling**//. | Θα πρέπει να τονίσουμε ότι υπάρχουν διαφορετικοί τύποι event για κάθε διαφορετικό τύπο αλληλεπίδρασης του χρήστη με το γραφικό περιβάλλον. Για παράδειγμα, η μετακίνηση του ποντικιού ή το πάτημα ενός κουμπιού από το ποντίκι παράγει ένα **MouseEvent** ενώ το πάτημα ενός κουμπιού ή η επιλογή ενός menu παράγει ένα **ActionEvent**. Επομένως, το κάθε πρόγραμμα θα πρέπει να θεσπίσει τους κατάλληλους event //listeners// που διαχειρίζονται τα event που παράγονται από τις οντότητες του γραφικού περιβάλλοντος που ενδιαφέρουν. Η διαδικασία διαχείρισης και αντίδρασης του προγράμματος σε ένα event, ονομάζεται //**event handling**//. |
| |
| Η εικόνα που ακολουθεί συνοψίζει την διαδικασία για την εφαρμογή της προηγούμενης ενότητας που περιέχει μόνο ένα κουμπί (//button//). | Η εικόνα που ακολουθεί συνοψίζει την διαδικασία για την εφαρμογή της προηγούμενης ενότητας που περιέχει μόνο ένα κουμπί (//button//). |
| * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionEvent.html|ActionEvent]]:** Ένα ActionEvent δημιουργείται όταν πατήσετε ένα button του γραφικού περιβάλλοντος ή επιλέξετε το στοιχείο ενός combo box ή επιλέξετε ένα στοιχείο από το κεντρικό μενού της εφαρμογής. | * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionEvent.html|ActionEvent]]:** Ένα ActionEvent δημιουργείται όταν πατήσετε ένα button του γραφικού περιβάλλοντος ή επιλέξετε το στοιχείο ενός combo box ή επιλέξετε ένα στοιχείο από το κεντρικό μενού της εφαρμογής. |
| * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemEvent.html|ItemEvent]]:** Ένα //event// που σηματοδοτεί κατά πόσο ένα αντικείμενο τύπου //checkbox// είναι επιλεγμένο ή απο-επιλεγμένο. Τα //event// αυτού του τύπου λαμβάνονται από αντικείμενα της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemListener.html|ItemListener]] που συνδέονται με το //checkbox component// που το οποίο παράγει το event. | * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemEvent.html|ItemEvent]]:** Ένα //event// που σηματοδοτεί κατά πόσο ένα αντικείμενο τύπου //checkbox// είναι επιλεγμένο ή απο-επιλεγμένο. Τα //event// αυτού του τύπου λαμβάνονται από αντικείμενα της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemListener.html|ItemListener]] που συνδέονται με το //checkbox component// που το οποίο παράγει το event. |
| * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyEvent.html|KeyEvent]]:** Παράγεται όταν πατιέται ένα πλήκτρο από το πληκτρολόγιο και προέρχεται από το //component// του γραφικού περιβάλλοντος που εκείνη τη στιγμή είναι ενεργό (έχει το //focus//). Κάθε χαρακτήρας στο πληκτρολόγιο αντιστοιχίζεται σε ένα μοναδικό εικονικό (virtual) ακέραιο αριθμό. Οι κυριότερες μέθοδοι της κλάσης είναι οι εξής: | * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyEvent.html|KeyEvent]]:** Παράγεται όταν πιέζεται ένα πλήκτρο από το πληκτρολόγιο και προέρχεται από το //component// του γραφικού περιβάλλοντος που εκείνη τη στιγμή είναι ενεργό (έχει το //focus//). Κάθε χαρακτήρας στο πληκτρολόγιο αντιστοιχίζεται σε ένα μοναδικό εικονικό (virtual) ακέραιο αριθμό. Οι κυριότερες μέθοδοι της κλάσης είναι οι εξής: |
| * **public int getKeyCode():** Επιστρέφει τον κωδικό του πλήκτρου που πατήθηκε. | * **public int getKeyCode():** Επιστρέφει τον κωδικό του πλήκτρου που πατήθηκε. |
| * **public char getKeyChar():** Επιστρέφει τον χαρακτήρα που αντιστοιχεί στο πλήκτρο που πατήθηκε. Έχει νόημα να κληθεί μόνο εάν έχει πατηθεί πλήκτρο ή συνδυασμός πλήκτρων που παράγουν εκτυπώσιμους χαρακτήρες, δηλαδή keyTypedEvent (δες KeyListener παρακάτω). | * **public char getKeyChar():** Επιστρέφει τον χαρακτήρα που αντιστοιχεί στο πλήκτρο που πατήθηκε. Έχει νόημα να κληθεί μόνο εάν έχει πατηθεί πλήκτρο ή συνδυασμός πλήκτρων που παράγουν εκτυπώσιμους χαρακτήρες, δηλαδή keyTypedEvent (δες KeyListener παρακάτω). |