swing:events

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
swing:events [2018/03/27 22:17]
gthanos [Οι βασικοί τύποι των διαφορετικών Event]
swing:events [2020/03/17 06:36]
gthanos [Παράδειγμα - Πιάνοντας ένα event μέσω ενός Event Listener]
Line 5: Line 5:
 Ο **//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//).
Line 28: Line 28:
     - Ο δρομέας του ποντικιού εξάγεται από περιοχή που συμπίπτει με το //component//  για το οποίο παράγεται το //event//.     - Ο δρομέας του ποντικιού εξάγεται από περιοχή που συμπίπτει με το //component//  για το οποίο παράγεται το //event//.
     - Ο δρομέας του ποντικιού μετακινείται πάνω σε περιοχή που συμπίπτει με το //component//.     - Ο δρομέας του ποντικιού μετακινείται πάνω σε περιοχή που συμπίπτει με το //component//.
-    - Ο δρομέας του ποντικιού μετακινείται έχοντας παράλληλα πατημένο το αριστερό πλήκτρο (σέρνει/drags) ένα //component//.+    - Ο δρομέας του ποντικιού μετακινείται έχοντας παράλληλα πατημένο το αριστερό πλήκτρο σέρνωντας (drags) ένα //component//.
   * Οι κυριότερες μέθοδοι της κλάσης **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseEvent.html|MouseEvent:]]** είναι οι εξής:    * Οι κυριότερες μέθοδοι της κλάσης **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseEvent.html|MouseEvent:]]** είναι οι εξής: 
     * **public int getButton():** Κάθε πλήκτρο του ποντικιού αντιστοιχεί σε μία ακέραια σταθερά. Επιστρέφει έναν αριθμό που αντιστοιχεί στο πλήκτρο ή τα πλήκτρα του ποντικιού που έχουν πατηθεί.     * **public int getButton():** Κάθε πλήκτρο του ποντικιού αντιστοιχεί σε μία ακέραια σταθερά. Επιστρέφει έναν αριθμό που αντιστοιχεί στο πλήκτρο ή τα πλήκτρα του ποντικιού που έχουν πατηθεί.
Line 45: Line 45:
 ===== Event Listeners ===== ===== Event Listeners =====
  
-Για τον πιάσιμο των παραπάνω τύπων events, η Java ορίζει ένα σύνολο από interfaces, τα οποία τα οποία όταν υλοποιούνται από μία κλάση και συνδυαστούν με κάποιο από τα //components// του γραφικού περιβάλλοντος έχουν την δυνατότητα να πιάσουν συγκεκριμένους τύπους από events. Όλοι τα //interfaces// που μας ενδιαφέρουν είναι απόγονοι της κλάσης **[[https://docs.oracle.com/javase/8/docs/api/java/util/EventListener.html|java.util.EventListener]]** και βρίσκονται στο πακέτο **java.awt.event**+Για τον πιάσιμο των παραπάνω τύπων events, η Java ορίζει ένα σύνολο από interfaces, τα οποία τα οποία όταν υλοποιούνται από μία κλάση και συνδυαστούν με κάποιο από τα //components// του γραφικού περιβάλλοντος έχουν την δυνατότητα να πιάσουν συγκεκριμένους τύπους από events. Όλα τα //interfaces// που μας ενδιαφέρουν είναι απόγονοι της κλάσης **[[https://docs.oracle.com/javase/8/docs/api/java/util/EventListener.html|java.util.EventListener]]** και βρίσκονται στο πακέτο **java.awt.event**
  
 Οι κυριότεροι Event Listeners είναι οι εξής: Οι κυριότεροι Event Listeners είναι οι εξής:
Line 54: Line 54:
     * **void keyTyped(KeyEvent e):** Η μέθοδος καλείται εάν πατηθεί ένα πλήκτρο ή συνδυασμός πλήκτρων που αντιστοιχεί σε εκτυπώσιμο χαρακτήρα. Δεν έχει σημασία εάν το πλήκτρο έχει ελευθερωθεί ή όχι, αρκεί να έχει σηματοδοτηθεί η παραγωγή του χαρακτήρα προς την εφαρμογή.     * **void keyTyped(KeyEvent e):** Η μέθοδος καλείται εάν πατηθεί ένα πλήκτρο ή συνδυασμός πλήκτρων που αντιστοιχεί σε εκτυπώσιμο χαρακτήρα. Δεν έχει σημασία εάν το πλήκτρο έχει ελευθερωθεί ή όχι, αρκεί να έχει σηματοδοτηθεί η παραγωγή του χαρακτήρα προς την εφαρμογή.
     * **void keyPressed(KeyEvent e):** Η μέθοδος καλείται εάν πατηθεί οποιοδήποτε πλήκτρο.     * **void keyPressed(KeyEvent e):** Η μέθοδος καλείται εάν πατηθεί οποιοδήποτε πλήκτρο.
-    * **void keyPressed(KeyEvent e):** Η μέθοδος καλείται όταν ελευθερωθεί οποιοδήποτε πλήκτρο που πατήθηκε προηγούμενα.+    * **void keyReleased(KeyEvent e):** Η μέθοδος καλείται όταν ελευθερωθεί οποιοδήποτε πλήκτρο που πατήθηκε προηγούμενα.
   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseListener.html|MouseListener]]:** Έχει τη δυνατότητα να "πιάσει" [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseEvent.html|MouseEvent]]s που συνδέονται με ενέργειες του ποντικιού (π.χ. αριστερό/δεξί click, πάτημα ή απελευθέρωση ενός κουμπιού του ποντικιού ή είσοδος/έξοδος του ποντικιού) πάνω σε ένα //component// της εφαρμογής. Συγκεκριμένα, οι μέθοδοι που διαθέτει είναι οι εξής:   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseListener.html|MouseListener]]:** Έχει τη δυνατότητα να "πιάσει" [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseEvent.html|MouseEvent]]s που συνδέονται με ενέργειες του ποντικιού (π.χ. αριστερό/δεξί click, πάτημα ή απελευθέρωση ενός κουμπιού του ποντικιού ή είσοδος/έξοδος του ποντικιού) πάνω σε ένα //component// της εφαρμογής. Συγκεκριμένα, οι μέθοδοι που διαθέτει είναι οι εξής:
     * **void mouseClicked(MouseEvent e):** Καλείται όταν πατηθεί ένα κουμπί του ποντικιού (πατηθεί και απελευθερωθεί) πάνω στο στοιχείο (//component//).     * **void mouseClicked(MouseEvent e):** Καλείται όταν πατηθεί ένα κουμπί του ποντικιού (πατηθεί και απελευθερωθεί) πάνω στο στοιχείο (//component//).
Line 101: Line 101:
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
-    button = new JButton("  Put Curson on Me!  ");+    button = new JButton("  Put Cursor!  ");
     button.setBackground(new Color(0xe9,0xe9,0xe9));     button.setBackground(new Color(0xe9,0xe9,0xe9));
     button.setFont(new Font("Courier", Font.BOLD, 15));     button.setFont(new Font("Courier", Font.BOLD, 15));
Line 119: Line 119:
       }       }
       public void mouseEntered(MouseEvent e) {       public void mouseEntered(MouseEvent e) {
-        button.setText("    Now Click Me!   ");+        button.setText("  Press  me!   ");
       }       }
       public void mouseExited(MouseEvent e) {       public void mouseExited(MouseEvent e) {
-        button.setText("  Put Curson on Me! ");+        button.setText("  Put Cursor ");
       }       }
       public void mousePressed(MouseEvent e) {       public void mousePressed(MouseEvent e) {
-        button.setText("     Release Me!    ");+        button.setText("  Release Me!  ");
       }       }
       public void mouseReleased(MouseEvent e) {       public void mouseReleased(MouseEvent e) {
-        button.setText("   Press me again ");+        button.setText("  Press again  ");
       }       }
     });     });
swing/events.txt · Last modified: 2021/04/13 05:16 (external edit)