User Tools

Site Tools


swing:events

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
swing:events [2018/03/20 18:29] – [Οι βασικοί τύποι των διαφορετικών Event] gthanosswing:events [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Events και Listeners ======+====== Events και Event Listeners ======
  
 Όταν ο χρήστης πατήσει ένα πλήκτρο από το πληκτρολόγιο ή μετακινήσει το ποντίκι, ο **//window manager//** στέλνει μία ειδοποίηση (//event//) που σηματοδοτεί την ενέργεια που έκανε ο χρήστης. Για παράδειγμα, πατώντας με τη βοήεια του ποντικιού (αριστερό click) ένα κουμπί από το γραφικό περιβάλλον, μετακινώντας το ποντίκι πάνω στο ενεργό παράθυρο ή εισάγοντας ένα χαρακτήρα από το πληκτρολόγιο παράγεται ένα event που σηματοδοτεί την αλλαγή που έκανε ο χρήστης. Όταν ο χρήστης πατήσει ένα πλήκτρο από το πληκτρολόγιο ή μετακινήσει το ποντίκι, ο **//window manager//** στέλνει μία ειδοποίηση (//event//) που σηματοδοτεί την ενέργεια που έκανε ο χρήστης. Για παράδειγμα, πατώντας με τη βοήεια του ποντικιού (αριστερό click) ένα κουμπί από το γραφικό περιβάλλον, μετακινώντας το ποντίκι πάνω στο ενεργό παράθυρο ή εισάγοντας ένα χαρακτήρα από το πληκτρολόγιο παράγεται ένα event που σηματοδοτεί την αλλαγή που έκανε ο χρήστης.
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//).
  
 {{  :swing:swingeventhandlingprocess2.png  |}} {{  :swing:swingeventhandlingprocess2.png  |}}
 +
 ===== Οι βασικοί τύποι των διαφορετικών Event ===== ===== Οι βασικοί τύποι των διαφορετικών Event =====
  
-Όλα τα events που μας ενδιαφέρουν κληρονομούν την κλάση **[[https://docs.oracle.com/javase/7/docs/api/java/awt/AWTEvent.html|java.awt.AWTEvent]]** που με τη σειρά της κληρονομεί την κλάση **[[https://docs.oracle.com/javase/7/docs/api/java/util/EventObject.html|java.util.EventObject]]**. +Τα περισσότερα από τα //events// που μας ενδιαφέρουν κληρονομούν την κλάση **[[https://docs.oracle.com/javase/7/docs/api/java/awt/AWTEvent.html|java.awt.AWTEvent]]** που με τη σειρά της κληρονομεί την κλάση **[[https://docs.oracle.com/javase/7/docs/api/java/util/EventObject.html|java.util.EventObject]]**. 
-Οι κλάσεις των events βρίσκονται μέσα στο πακέτο **java.awt.event**. Οι κυριότεροι τύποι event είναι οι εξής:+Οι κλάσεις των events βρίσκονται μέσα στα πακέτα [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/package-frame.html|java.awt.event]] και [[https://docs.oracle.com/javase/8/docs/api/javax/swing/event/package-frame.html|javax.swing.event]]. Οι βασικοί τύποι //event// είναι οι εξής:
  
   * **[[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/KeyEvent.html|KeyEvent]]:** Παράγεται όταν πατιέται ένα πλήκτρο από το πληκτρολόγιο και προέρχεται από το //component// του γραφικού περιβάλλοντος που εκείνη τη στιγμή είναι ενεργό (έχει το //focus//). Κάθε χαρακτήρας στο πληκτρολόγιο αντιστοιχίζεται σε ένα μοναδικό εικονικό (virtual) ακέραιο αριθμό, το οποία αποτελεί πληροφορία που φέρει το αντικείμενο του //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) ακέραιο αριθμό. Οι κυριότερες μέθοδοι της κλάσης είναι οι εξής:
     * **public int getKeyCode():** Επιστρέφει τον κωδικό του πλήκτρου που πατήθηκε.     * **public int getKeyCode():** Επιστρέφει τον κωδικό του πλήκτρου που πατήθηκε.
     * **public char getKeyChar():** Επιστρέφει τον χαρακτήρα που αντιστοιχεί στο πλήκτρο που πατήθηκε. Έχει νόημα να κληθεί μόνο εάν έχει πατηθεί πλήκτρο ή συνδυασμός πλήκτρων που παράγουν εκτυπώσιμους χαρακτήρες, δηλαδή keyTypedEvent (δες KeyListener παρακάτω).     * **public char getKeyChar():** Επιστρέφει τον χαρακτήρα που αντιστοιχεί στο πλήκτρο που πατήθηκε. Έχει νόημα να κληθεί μόνο εάν έχει πατηθεί πλήκτρο ή συνδυασμός πλήκτρων που παράγουν εκτυπώσιμους χαρακτήρες, δηλαδή keyTypedEvent (δες KeyListener παρακάτω).
Line 26: 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 43: 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 είναι οι εξής:
   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionListener.html|ActionListener]]:** Έχει την δυνατότητα να "πιάσει" ένα [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionEvent.html|ActionEvent]]. Διαθέτει την εξής μέθοδο:   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionListener.html|ActionListener]]:** Έχει την δυνατότητα να "πιάσει" ένα [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionEvent.html|ActionEvent]]. Διαθέτει την εξής μέθοδο:
     * **void actionPerformed(ActionEvent e)**:     * **void actionPerformed(ActionEvent e)**:
 +  * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemListener.html|ItemListener]]:** Έχει την δυνατότητα να "πιάσει" ένα [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemEvent.html|ItemEvent]], το οποίο συνήθως παράγεται από ένα //CheckBox component//.
   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyListener.html|KeyListener]]:** Έχει την δυνατότητα να "πιάσει" ένα [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyEvent.html|KeyEvent]]. Διαθέτεις τις εξής μεθόδους:   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyListener.html|KeyListener]]:** Έχει την δυνατότητα να "πιάσει" ένα [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyEvent.html|KeyEvent]]. Διαθέτεις τις εξής μεθόδους:
     * **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]]:** Έχει την δυνατότητα να "πιάσει" events που συνδέονται με το ποντίκι πάνω σε ένα //component// της εφαρμογής, όπως αριστερό/δεξί 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//). 
-    * **void mousePressed(MouseEvent e):** Καλείται όταν πατηθεί ένα κουμπί του ποντικιού πάνω σε ένα στοιχείο (//component//). +    * **void mousePressed(MouseEvent e):** Καλείται όταν πατηθεί ένα κουμπί του ποντικιού πάνω στο στοιχείο (//component//). 
-    * **void mouseReleased(MouseEvent e):** Καλείται όταν έχει ελευθερωθεί ένα κουμπί του ποντικιού που προηγουμένως πατήθηκε πάνω σε ένα στοιχείο (//component//). +    * **void mouseReleased(MouseEvent e):** Καλείται όταν έχει ελευθερωθεί ένα κουμπί του ποντικιού που προηγουμένως πατήθηκε πάνω στο στοιχείο (//component//). 
-    * **void mouseEntered(MouseEvent e):** Καλείται όταν το ποντίκι μπαίνει στην περιοχή ενός στοιχείου (//component//). +    * **void mouseEntered(MouseEvent e):** Καλείται όταν το ποντίκι μπαίνει στην περιοχή του στοιχείου (//component//). 
-    * **void mouseExited(MouseEvent e):** Καλείται όταν το ποντίκι βγαίνει στην περιοχή ενός στοιχείου (//component//).+    * **void mouseExited(MouseEvent e):** Καλείται όταν το ποντίκι βγαίνει στην περιοχή του στοιχείου (//component//).
   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseMotionListener.html|MouseMotionListener]]:** Έχει την δυνατότητα να "πιάσει" events που συνδέονται με την κίνηση του ποντικιού και το σύρσιμο (//dragging//) στοιχείων του γραφικού περιβάλλοντος. Διαθέτεις τις εξής μεθόδους:   * **[[https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseMotionListener.html|MouseMotionListener]]:** Έχει την δυνατότητα να "πιάσει" events που συνδέονται με την κίνηση του ποντικιού και το σύρσιμο (//dragging//) στοιχείων του γραφικού περιβάλλοντος. Διαθέτεις τις εξής μεθόδους:
     * **void mouseDragged(MouseEvent e):** Καλείται όταν πατηθεί ένα κουμπί του ποντικιού πάνω σε ένα στοιχείο και στη συνέχεια συρθεί. Τα συμβάντα MOUSE_DRAGGED θα συνεχίσουν να παραδίδονται στο στοιχείο όπου σύρεται, μέχρι να απελευθερωθεί το κουμπί του ποντικιού.     * **void mouseDragged(MouseEvent e):** Καλείται όταν πατηθεί ένα κουμπί του ποντικιού πάνω σε ένα στοιχείο και στη συνέχεια συρθεί. Τα συμβάντα MOUSE_DRAGGED θα συνεχίσουν να παραδίδονται στο στοιχείο όπου σύρεται, μέχρι να απελευθερωθεί το κουμπί του ποντικιού.
Line 70: Line 73:
 ===== Παράδειγμα - Πιάνοντας ένα event μέσω ενός Event Listener   ===== ===== Παράδειγμα - Πιάνοντας ένα event μέσω ενός Event Listener   =====
  
-Παρακάτω δίνεται το παράδειγμα της κλάσης EventHandling, η οποία δημιουργεί ένα παράθυρο και "πιάνει" διάφορα events που παράγονται από το ποντίκι και το πληκτρολόγιο στα επιμέρους components της παραθυρικής εφαρμογής. Η εφαρμογή δημιουργεί ένα κουμπί και τα εξής τέσσερα (4textfields+Παρακάτω δίνεται το παράδειγμα της κλάσης EventHandling, η οποία δημιουργεί ένα παράθυρο και "πιάνει" διάφορα events που παράγονται από το ποντίκι και το πληκτρολόγιο στα επιμέρους components της παραθυρικής εφαρμογής. Η εφαρμογή δημιουργεί ένα κουμπί και τα εξής τέσσερα (3textfield πεδία
-  * **ActionEvent: ** Μετράει πόσες φορές έχει γίνει click το κουμπί στα δεξιά. +  * **Button Clicks: ** Μετράει πόσες φορές έχει γίνει click το κουμπί στα δεξιά. 
-  * **KeyEvent: ** Δηλώνει ποιος χαρακτήρας πατήθηκε κάθε φορά όταν το focus είναι στο συγκεκριμένο textfield. +  * **Keyboard Input: ** Δηλώνει ποιος χαρακτήρας πατήθηκε κάθε φορά όταν το focus είναι στο συγκεκριμένο textfield. 
-  * **MouseEvent: ** Δηλώνει τη ποιο κουμπί του mouse πατήθηκε και σε ποια θέση μέσα στο παράθυρο. To ποντίκι θα πρέπει να πατηθεί ΕΚΤΟΣ textfield και button. +  * **Mouse current position on window:** Δηλώνει τη θέση του δρομέα του ποντικιού εντός της εφαρμογής. 
-  * **MouseMotionEvent:** Δηλώνει τη θέση του δρομέα του ποντικιού εντός της εφαρμογής.+
 Το κουμπί εμφανίζει διαφορετικά μηνύματα όταν ο δρομέας του ποντικιού βρίσκεται πάνω από αυτό, απομακρύνεται ή γίνεται //click//. Το κουμπί εμφανίζει διαφορετικά μηνύματα όταν ο δρομέας του ποντικιού βρίσκεται πάνω από αυτό, απομακρύνεται ή γίνεται //click//.
  
Line 90: Line 93:
   JTextField actionEventTextField;   JTextField actionEventTextField;
   JTextField keyEventTextField;   JTextField keyEventTextField;
-  JTextField mouseEventTextField; 
   JTextField mouseMotionEventTextField;   JTextField mouseMotionEventTextField;
   int buttonClickedCount;   int buttonClickedCount;
Line 99: 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));
-    Border buttonBorder = BorderFactory.createLineBorder(new Color(0xf90xf90xf9), 8);+    button.setFont(new Font("Courier"Font.BOLD15)); 
 +    Border buttonBorder = BorderFactory.createRaisedBevelBorder();
     button.setBorder(buttonBorder);     button.setBorder(buttonBorder);
          
Line 116: 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) {
Line 125: Line 128:
       }       }
       public void mouseReleased(MouseEvent e) {       public void mouseReleased(MouseEvent e) {
-        button.setText("  Press me again ");+        button.setText("  Press again  ");
       }       }
     });     });
-     +      
-    frame.addMouseListener( new MouseListener() { +
-      public void mouseClicked(MouseEvent e) { +
-        switch(e.getButton()) { +
-          case MouseEvent.BUTTON1: +
-            mouseEventTextField.setText("Clicked LEFT button at "+e.getX()+", "+e.getY()); +
-            break; +
-          case MouseEvent.BUTTON2: +
-            mouseEventTextField.setText("Clicked MIDDLE button at "+e.getX()+", "+e.getY()); +
-            break; +
-          case MouseEvent.BUTTON3: +
-            mouseEventTextField.setText("Clicked RIGHT button at "+e.getX()+", "+e.getY()); +
-            break; +
-        } +
-      } +
-      public void mouseEntered(MouseEvent e) { +
-      } +
-      public void mouseExited(MouseEvent e) { +
-      } +
-      public void mousePressed(MouseEvent e) { +
-      } +
-      public void mouseReleased(MouseEvent e) { +
-      } +
-    }); +
-    +
     frame.add(button, BorderLayout.EAST);     frame.add(button, BorderLayout.EAST);
                
-    textFieldPanel = new JPanel(new GridLayout(4, 2, 3, 3));    +    textFieldPanel = new JPanel(new GridLayout(5, 2, 3, 3));    
          
-    textFieldPanel.add(new JLabel("ActionEvent:"));+    textFieldPanel.add(new JLabel("Button Clicks:"));
     actionEventTextField = new JTextField("", TEXT_FIELD_SIZE);         actionEventTextField = new JTextField("", TEXT_FIELD_SIZE);    
     textFieldPanel.add(actionEventTextField);     textFieldPanel.add(actionEventTextField);
          
-    textFieldPanel.add(new JLabel("KeyEvent:"));+    textFieldPanel.add(new JLabel("Keyboard Input:"));
     keyEventTextField = new JTextField("", TEXT_FIELD_SIZE);     keyEventTextField = new JTextField("", TEXT_FIELD_SIZE);
     keyEventTextField.addKeyListener( new KeyListener() {     keyEventTextField.addKeyListener( new KeyListener() {
Line 181: Line 160:
       }       }
     });         });    
-    textFieldPanel.add(keyEventTextField);+    textFieldPanel.add(keyEventTextField);    
          
-    textFieldPanel.add(new JLabel("MouseEvent:")); +    textFieldPanel.add(new JLabel("Mouse current position on window:"));
-    mouseEventTextField = new JTextField("", TEXT_FIELD_SIZE);     +
-    textFieldPanel.add(mouseEventTextField); +
-     +
-    textFieldPanel.add(new JLabel("MouseMotionEvent:"));+
     mouseMotionEventTextField = new JTextField("", TEXT_FIELD_SIZE);     mouseMotionEventTextField = new JTextField("", TEXT_FIELD_SIZE);
     frame.addMouseMotionListener( new MouseMotionListener() {     frame.addMouseMotionListener( new MouseMotionListener() {
Line 205: Line 180:
      
   public static void main(String []args) {   public static void main(String []args) {
-    new EventHandling();+    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
 +      public void run() { 
 +       new EventHandling(); 
 +      } 
 +    });
   }   }
 } }
 </code> </code>
 +
 +| Προηγούμενο: [[:swing:first_program | Το πρώτο μου πρόγραμμα ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:swing:jframe | Η κλάση JFrame ]] |
  
swing/events.1521570591.txt.gz · Last modified: 2018/03/20 18:29 (external edit)