swing:popup_menus

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
swing:popup_menus [2015/05/18 06:44]
gthanos
swing:popup_menus [2016/02/26 11:15] (current)
Line 3: Line 3:
 Ένα pop-up menu (υλοποιείται από την κλάση [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​JPopupMenu.html|JPopupMenu]]) μοιάζει στην δομή του με ένα οποιοδήποτε άλλο μενού, με την ιδιαιτερότητα ότι είναι διαφορετικός ο τρόπος με τον οποίο γίνεται trigger και εμφανίζεται στην οθόνη. Κατ'​ αρχήν, κάθε λειτουργικό σύστημα έχει χρησιμοποιεί διαφορετική αλληλουχία events προκειμένου να εμφανιστεί ένα pop-up menu. Για παράδειγμα στο λειτουργικό σύστημα Windows και στην πλατφόρμα KDE το pop-up menu εμφανίζεται με δεξί κλικ. Σε άλλες πλατφόρμες η παραπάνω σύμβαση μπορεί να είναι διαφορετική. ​ Ένα pop-up menu (υλοποιείται από την κλάση [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​JPopupMenu.html|JPopupMenu]]) μοιάζει στην δομή του με ένα οποιοδήποτε άλλο μενού, με την ιδιαιτερότητα ότι είναι διαφορετικός ο τρόπος με τον οποίο γίνεται trigger και εμφανίζεται στην οθόνη. Κατ'​ αρχήν, κάθε λειτουργικό σύστημα έχει χρησιμοποιεί διαφορετική αλληλουχία events προκειμένου να εμφανιστεί ένα pop-up menu. Για παράδειγμα στο λειτουργικό σύστημα Windows και στην πλατφόρμα KDE το pop-up menu εμφανίζεται με δεξί κλικ. Σε άλλες πλατφόρμες η παραπάνω σύμβαση μπορεί να είναι διαφορετική. ​
  
-Η Java λαμβάνει υπόψη αυτή την ιδιαιτερότητα,​ δίνοντας μας την δυνατότητα να εξετάσουμε κάθε φορά αν η αλληλουχία πλήκτρων του ποντικιού που έχουμε πατήσει είναι η κατάλληλη για να εμφανιστεί το pop-up menu. Για να εμφανίσουμε ένα pop-up menu δεν εξετάζουμε events του τύπου [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​ActionEvent.html|ActionEvent]],​ αλλά [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseEvent.html|MouseEvent]]. Τα events ​αυτού ​του τύπου λαμβάνονται από μία κλάση που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseListener.html|MouseListener]]. Η Java διαθέτει την έτοιμη κλάση [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseAdapter.html|MouseAdapter]] που υλοποιεί μια σειρά από interfaces που συνδέονται με το ποντίκι. Μπορείτε να επεκτείνετε αυτή την κλάση, υλοποιώντας μόνο τις μεθόδους που χρειάζεστε. Εδώ, θα χρειαστούμε τις μεθόδους από το interface //​MouseListener//​.+Η Java λαμβάνει υπόψη αυτή την ιδιαιτερότητα,​ δίνοντας μας την δυνατότητα να εξετάσουμε κάθε φορά αν η αλληλουχία πλήκτρων του ποντικιού που έχουμε πατήσει είναι η κατάλληλη για να εμφανιστεί το pop-up menu. Για να εμφανίσουμε ένα pop-up menu δεν εξετάζουμε events του τύπου [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​ActionEvent.html|ActionEvent]],​ αλλά ​του τύπου ​[[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseEvent.html|MouseEvent]]. Τα events του τύπου ​αυτού ​λαμβάνονται από μία κλάση που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseListener.html|MouseListener]]. Η Java διαθέτει την έτοιμη κλάση [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseAdapter.html|MouseAdapter]] που υλοποιεί μια σειρά από interfaces που συνδέονται με το ποντίκι. Μπορείτε να επεκτείνετε αυτή την κλάση, υλοποιώντας μόνο τις μεθόδους που χρειάζεστε. Εδώ, θα χρειαστούμε τις μεθόδους από το interface //​MouseListener//​.
  
 <code java> <code java>
Line 16: Line 16:
 <code java>​public boolean isPopupTrigger()</​code>​ <code java>​public boolean isPopupTrigger()</​code>​
  
-Δείτε το παρακάτω απλοποιημένο παράδειγμα από το site της Oracle+Δείτε το παρακάτω απλοποιημένο παράδειγμα από το site της Oracle. Αυτό που αξίζει να προσέξετε είναι η εσωτερική κλάση ''​PopupListener''​ η οποία υλοποιεί το interface //​MouseListener//​ μέσω της επέκτασης της κλάσης //​MouseAdapter//​. Στα events //​mousePressed//​ και //​mouseReleased//​ αυτό που θα κάνουμε είναι να ελέγξουμε εάν το συγκεκριμένο event δικαιολογεί την εμφάνιση του pop-up menu. Σε αυτή την περίπτωση το εμφανίζουμε μέσω της μεθόδου  
 +<code java> 
 +void show(Component invoker, int x, int y) 
 +</​code>​ 
 +της κλάσης [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​JPopupMenu.html|JPopupMenu]] στη θέση που προσδιορίζεται από τις συντεταγμένες (X,Y) του ποντικιού όταν έγινε το click event. 
 <code java PopupMenuDemo.java>​ <code java PopupMenuDemo.java>​
 package components; package components;
Line 164: Line 169:
 } }
 </​code>​ </​code>​
- 
-Αυτό που αξίζει να προσέξετε είναι η εσωτερική κλάση ''​PopupListener''​ η οποία υλοποιεί το interface //​MouseListener//​ μέσω της επέκτασης της κλάσης //​MouseAdapter//​. Στα events //​mousePressed//​ και //​mouseReleased//​ αυτό που θα κάνουμε είναι να ελέγξουμε εάν το συγκεκριμένο event δικαιολογεί την εμφάνιση του pop-up menu. Σε αυτή την περίπτωση το εμφανίζουμε μέσω της μεθόδου ​ 
-<code java> 
-void show(Component invoker, int x, int y) 
-</​code>​ 
-της κλάσης [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​JPopupMenu.html|JPopupMenu]] στις θέσεις που προσδιορίζονται από την θέση του ποντικιού όταν έγινε το click event. 
swing/popup_menus.1431931470.txt.gz · Last modified: 2016/02/26 11:15 (external edit)