ΤΕΙ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΟΙΚΟΝΟΜΙΑΣ & ΙΟΙΚΗΣΗΣ ΤΜΗΜΑ ΙΑΧΕΙΡΙΣΗΣ ΠΛΗΡΟΦΟΡΙΩΝ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΠΡΟΗΓΜΕΝΑ USER-INTERFACES ΣΕ JAVA ΜΕ ΤΗΝ ΒΙΒΛΙΟΘΗΚΗ SWING



Σχετικά έγγραφα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Graphical User Interfaces (GUI) SWING

ημιουργία Γραφικού Περιβάλλοντος

Εργαστήριο 4 - Άσκηση - Ανάλυση

Μέρος ΙΙ Εφαρμογές γραφικών με το πακέτο swing - 5. Περιεχόμενα

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Ειδικά Θέματα Προγραμματισμού

Εργαστήριο 7 - Άσκηση - Ανάλυση

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Graphical User Interfaces (GUI) SWING

Εργαστήριο 5 - Άσκηση - Ανάλυση

Εργαστήριο 6 - Άσκηση - Ανάλυση

Σχεσιακή Άλγεβρα. Κεφάλαιο 4. Database Management Systems, R. Ramakrishnan and J. Gehrke

ΙΑΤΜΗΜΑΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥ ΩΝ ΣΤΑ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. ι λωµατική εργασία µε θέµα:

ΣΕΜΙΝΑΡΙΟ JAVA. 2 η ιάλεξη

EVITA ΙΑΤΗΡΗΣΗ ΕΠΑΦΩΝ / ΗΜΙΟΥΡΓΙΑ ΕΜΠΙΣΤΟΣΥΝΗΣ. Σαντορίνη 28/04/2011 Βασίλειος Πα ανικολάου

ΟΙΚΟΝΟΜΙΚΗ ΠΡΟΣΦΟΡΑ ΣΧΕ ΙΑΣΗΣ ΚΑΙ ΚΑΤΑΣΚΕΥΗΣ ΙΑ ΙΚΤΥΑΚΟΥ ΠΛΗΡΟΦΟΡΙΑΚΟΎ ΣΥΣΤΗΜΑΤΟΣ. Τρίτη, 23 Νοεµβρίου 2010

ΓΡΑΦΙΚΕΣ ΔΙΕΠΑΦΕΣ ΧΡΗΣΤΗ- SWING (1)

Σηµειώσεις Θεωρίας και Μέθοδοι. Κεφάλαιο: Παράγωγοι. και Cgδυο συναρτήσεων f και g εργαζόµαστε ως εξής: x,f(x ) και ( ) ó a

ΠΡΟΟΔΕΥΤΙΚΗ ΑΡ. Μ.Α.Ε. 602/06/Β/86/04 ΓΕΜΗ Π Ρ Ο Σ Κ Λ Η Σ Η ΤΩΝ ΜΕΤΟΧΩΝ ΤΗΣ ΑΝΩΝΥΜΟΥ ΕΤΑΙΡΕΙΑΣ ΜΕ ΤΗΝ ΕΠΩΝΥΜΙΑ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΡΑΣΗΣ ΤΟΥ ΟΙΚΟΝΟΜΙΚΟΥ ΕΠΙΜΕΛΗΤΗΡΙΟΥ ΤΗΣ ΕΛΛΑ ΑΣ ΓΙΑ ΤΗΝ ΠΕΡΙΟ Ο

Γραφικές ιεπαφές Χρήστη και Γραφικά

Week 12: GUIs with Swing

ΝΗΡΕΥΣ ΙΧΘΥΟΚΑΛΛΙΕΡΓΕΙΕΣ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ Ε ΡΑ: ΗΜΟΣ ΚΟΡΩΠΙOY ΑΡΙΘΜΟΣ ΓΕΜΗ Π Ρ Ο Σ Κ Λ Η Σ Η. των Μετόχων σε Τακτική Γενική Συνέλευση

Ηλεκτρονική Έρευνα Ικανοποίησης Χρηστών Βιβλιοθήκης και Κέντρου Πληροφόρησης Πανεπιστηµίου Ιωαννίνων

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #17

ΣΧΕ ΙΑ ΑΠΟΦΑΣΕΩΝ ΕΠΙ ΤΩΝ ΘΕΜΑΤΩΝ ΤΗΣ ΗΜΕΡΗΣΙΑΣ ΙΑΤΑΞΗΣ ΤΗΣ ΤΑΚΤΙΚΗΣ ΓΕΝΙΚΗΣ ΣΥΝΕΛΕΥΣΗΣ ΤΗΣ 9/9/2019

Week 10: Graphical User Interfaces

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #18

Περιεχόµενα. Πρόλογος...15

Εργαστήριο 2 - Άσκηση - Ανάλυση

Βιοϊατρική τεχνολογία

Η ΤΗΛΕΟΡΑΣΗ ΣΤΟ ΠΛΑΙΣΙΟ ΤΗΣ ΣΥΓΚΛΙΣΗΣ ΤΩΝ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ, ΤΩΝ ΜΕΣΩΝ ΜΑΖΙΚΗΣ ΕΝΗΜΕΡΩΣΗΣ ΚΑΙ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΩΝ 1

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

ΣΕΜΙΝΑΡΙΟ JAVA. 5 η ιάλεξη

ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΠΡΟΪΟΝΤΟΣ. Φωτεινή Ένδειξη Λειτουργίας. Λουρί. Ηχείο

H.Q.A.A. Α. Ι.Π. ιασφάλιση Ποιότητας στην Ανώτατη Εκπαίδευση ΠΑΡΑΡΤΗΜΑ Οδηγός εφαρµογής της διαδικασίας Εσωτερικής Αξιολόγησης

ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ ΝΟΜΟΣ ΑΤΤΙΚΗΣ Αγ. Στέφανος ΗΜΟΣ ΙΟΝΥΣΟΥ Αριθ. Πρωτ.: ΙΕΥΘΥΝΣΗ ΟΙΚ. ΥΠΗΡΕΣΙΩΝ

Εργαστήριο 10 Άσκηση 1 - Ανάλυση

KΕΦΑΛΑΙΟ ΣΧΕ ΙΑΣΜΟΣ ΙΕΠΑΦΗΣ ΧΡΗΣΤΗ

ΠΡΟΣΕΛΚΥΣΗ ΕΝ ΙΑΦΕΡΟΝΤΟΣ

Περιεχόμενα. Λίγα λόγια από το συγγραφέα... 7

ΠΑΡΑΡΤΗΜΑ I ΤΥΠΟΠΟΙΗΜΕΝΟ ΕΝΤΥΠΟ ΠΛΗΡΟΦΟΡΙΩΝ ΣΧΕΤΙΚΑ ΜΕ ΤΙΣ ΣΥΜΒΑΣΕΙΣ ΚΑΤΑΝΑΛΩΤΩΝ ΓΙΑ ΤΗΝ ΑΓΟΡΑ ΧΡΟΝΟΜΕΡΙ ΙΩΝ

ΙΠΑΑ /ΠΡΟΣ/167/οικ.26047/ , και ΙΠΑΑ /ΠΡΟΣ/180/οικ.42334/ (Α Α:6ΖΕΗ465ΧΘΨ-ΟΛΓ) εγκύκλιοι του Υ ουργείου ιοικητικής

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Εργαστήριο 9 - Άσκηση - Ανάλυση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ

Εργαστήριο 8 - Άσκηση - Ανάλυση

ΠΡΟΣΘΗΚΗ- ΤΡΟΠΟΛΟΓΙΑ ΣΤΟ ΣΧΕ ΙΟ ΝΟΜΟΥ ΤΟΥ ΥΠΟΥΡΓΕΙΟΥ ΤΟΥΡΙΣΜΟΥ «Α

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 12 : ΒΑΣΙΚΑ ΣΤΟΙΧΕΙΑ GUI AWT ΚΑΙ

ΑΛΛΗΛΕΠΙ ΡΑΣΗ ΑΝΘΡΩΠΟΥ ΜΗΧΑΝΗΣ 6 o ΕΡΓΑΣΤΗΡΙO

Ο Ανα ληρωτής Υ ουργός Εσωτερικών και ιοικητικής Ανασυγκρότησης. Χριστόφορος Βερναρδάκης

Τεχνολογικό Εκ αιδευτικό Ίδρυµα Κρήτης

Οµιλία Προέδρου Κ.Ε..Ε Γ. Πατούλη στο Συνέδριο των ΦΟΣ Α

Equase Κωδικός διανοµής :

Ελάχιστη Α αιτούµενη Α αρτία: 20% του συνόλου των κοινών, µετά δικαιώµατος ψήφου, µετοχών εκδόσεως της εταιρείας

ΘΕΩΡΙΑ ΤΩΝ ΕΠΙΛΟΓΩΝ ΤΟΥ ΚΑΤΑΝΑΛΩΤΗ I

«Η Ε ΑΦΙΚΗ ΠΡΟΣΕΓΓΙΣΗ ΤΗΣ ΑΝΑΠΤΥΞΗΣ: ΓΙΑ ΜΙΑ ΠΙΟ

ΠΥΘΙΑ BUSINESS FORECASTING SYSTEM

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΕΠΙΣΤΗΜΩΝ ΤΗΣ ΙΟΙΚΗΣΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΟΙΚΟΝΟΜΙΑΣ ΚΑΙ ΙΟΙΚΗΣΗΣ ΣΤΟΧΑΣΤΙΚΑ ΜΟΝΤΕΛΑ

δεν µ ορούµε να συµφωνήσουµε µε οιον τρό ο το ρόβληµα αυτό θα λυθεί.

ΚΙΝΗΤΕΣ & ΟΡΥΦΟΡΙΚΕΣ ΕΠΙΚΟΙΝΩΝΙΕΣ 4 Ο ΚΕΦΑΛΑΙΟ ΠΑΡΕΜΒΟΛΕΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ροστίθεται το εριθώριο διανοµής, το ο οίο αραµένει σταθερό (σε ανά kwh) καθ

ΕΙΣΑΓΩΓΗ ΣΤΗ ΣΤΑΤΙΣΤΙΚΗ

ΑΧΟΝ ΧΡΗΜΑΤΙΣΤΗΡΙΑΚΗ Α.Ε.Π.Ε.Υ ΠΟΛΙΤΙΚΗ ΒΕΛΤΙΣΤΗΣ ΕΚΤΕΛΕΣΗΣ ΕΝΤΟΛΩΝ

ΠΕΡΙΕΧΟΜΕΝΑ 1. Τεχνική Έκθεση 2. Ενδεικτικός Προϋ ολογισµός 3. Συγγραφή Υ οχρεώσεων ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ ΗΜΟΣ Η.Π.ΝΑΟΥΣΑΣ AΡ.ΠΡΩΤ.

Οντοκεντρικός Προγραμματισμός

Πιο αναλυτικά, οι τρο ο οιήσεις ου σχεδιάστηκαν για το εγκεκριµένο έργο και εριγράφονται στο αρόν συµ ληρωµατικό τεύχος είναι οι εξής:

8.1 Top-Level Swing Containers και Swing Components

VK -14/10/2016 Σελίς 1

Περιεχόμενα ΜΕΡΟΣ ΠΡΩΤΟ. Πρόλογος... 13

Ι ΡΥΜΑ ΝΕΟΛΑΙΑΣ ΚΑΙ ΙΑ ΒΙΟΥ ΜΑΘΗΣΗΣ ΙΕΥΘΗΝΣΗ ΙΟΙΚΗΤΙΚΩΝ ΚΑΙ ΟΙΚΟΝΟΜΙΚΩΝ ΥΠΗΡΕΣΙΩΝ ΤΜΗΜΑ ΠΡΟΜΗΘΕΙΩΝ ΚΑΙ ΙΟΙΚΗΤΙΚΗΣ ΜΕΡΙΜΝΑΣ

ΠΡΟΣΚΛΗΣΗ ΕΚ ΗΛΩΣΗΣ ΕΝ ΙΑΦΕΡΟΝΤΟΣ Ι ΡΥΜΑ ΝΕΟΛΑΙΑΣ ΚΑΙ ΙΑ ΒΙΟΥ ΜΑΘΗΣΗΣ ΙΕΥΘΥΝΣΗ ΠΡΟΜΗΘΕΙΩΝ

Αρ. Πρωτ: 6284 Βόλος 3/5/2012

ΕΛΛΗΝΙΚΗ ΨΥΧΑΝΑΛΥΤΙΚΗ ΕΤΑΙΡΕΙΑ

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Διαδικτύου

ΕΝΑΛΛΑΚΤΙΚΟΙ ΤΡΟΠΟΙ ΠΡΟΣΤΑΣΙΑΣ ΤΗΣ ΙΑΝΟΗΤΙΚΗΣ Ι ΙΟΚΤΗΣΙΑΣ

Το Τµήµα ΗΜΜΥ του Πολυτεχνείου Κρήτης

4. Η συµµετοχή στην ροωθητική ενέργεια και τον ιαγωνισµό είναι δωρεάν και δεν α αιτείται αγορά ο οιουδή οτε ροϊόντος της ιοργανώτριας.

ΑΝΑΚΟΙΝΩΣΗ υ ' αριθµ. ΣΜΕ 1/2012 για τη σύναψη ΣΥΜΒΑΣΗΣ ΜΙΣΘΩΣΗΣ ΕΡΓΟΥ. Ο ήµος Θεσσαλονίκης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΒΙΒΛΙΟΘΗΚΗ & ΚΕΝΤΡΟ ΠΛΗΡΟΦΟΡΗΣΗΣ

Να σταλεί και µε

ΠΡΟΚΗΡΥΞΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΧΟΡΗΓΗΣΗΣ ΥΠΟΤΡΟΦΙΩΝ Υ ΑΣ ΣΕ ΑΛΛΟ ΑΠΟΥΣ ΣΠΟΥ ΑΣΤΕΣ - ΑΚΑ ΗΜΑΪΚΟ ΕΤΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΙΑΤΜΗΜΑΤΙΚΟ ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΟΠΤΙΚΗ ΚΑΙ ΌΡΑΣΗ

ΠΡΟΣΚΛΗΣΗ ΓΙΑ ΤΗ ΙΕΞΑΓΩΓΗ ΚΛΗΡΩΣΗΣ ΓΙΑ ΤΗ ΙΑΘΕΣΗ ΤΟΥ ΧΩΡΟΥ ΠΟΛΛΑΠΛΩΝ ΧΡΗΣΕΩΝ ΣΤΟ ΣΤΑΘΜΟ ΜΕΤΡΟ «ΣΥΝΤΑΓΜΑ» ΤΟ ΙΑΣΤΗΜΑ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΑΝΘΡΩΠΙΣΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΠΙΣΤΗΜΩΝ ΤΗΣ ΠΡΟΣΧΟΛΙΚΗΣ ΑΓΩΓΗΣ ΚΑΙ ΤΟΥ ΕΚΠΑΙ ΕΥΤΙΚΟΥ ΣΧΕ ΙΑΣΜΟΥ

1 Η ΕΝΟΤΗΤΑ 1. Τι ονομάζεται επ ικοινωνία; Τι κοινό χρειάζεται για να επ ιτευχθεί;

Ειδικά Θέματα Προγραμματισμού

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΒΙΒΛΙΟΘΗΚΗ & ΚΕΝΤΡΟ ΠΛΗΡΟΦΟΡΗΣΗΣ

16PROC

4 ΤΥΠΟΣ ΣΥΝΑΡΤΗΣΗΣ ΣΥΝΑΡΤΗΣΕΙΣ Στο δι λανό Έστω η συνάρτηση f(x) = l n Αν f( x) = x+ x + 1. Να α οδείξετε ότι

60. ΤΙΜΟΚΑΤΑΛΟΓΟΣ ΠΑΡΟΧΗΣ ΥΠΗΡΕΣΙΩΝ ΖΩΙΚΗ ΠΑΡΑΓΩΓΗ

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ. 2 η ιάλεξη

VK -14/10/2016 Σελίς 1

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

1/ Σελίδα 1 α ό

ΕΡΓΑΣΤΗΡΙΟ CLIPS ΑΣΚΗΣΗ 1

ΘΕΜΑ: Υ οβολή σφραγισµένης ροσφοράς για την ροµήθεια ισύρµατων Ποµ ών και διενέργεια Ηλεκτρονικού Πλειστηριασµού (MR )

ΟΡΘΗ ΕΠΑΝΑΛΗΨΗ ΠΡΟΣΚΛΗΣΗ ΓΙΑ ΤΗ ΙΕΞΑΓΩΓΗ ΚΛΗΡΩΣΗΣ ΓΙΑ ΤΗ ΙΑΘΕΣΗ ΤΟΥ ΧΩΡΟΥ ΠΟΛΛΑΠΛΩΝ ΧΡΗΣΕΩΝ ΣΤΟ ΣΤΑΘΜΟ ΜΕΤΡΟ «ΣΥΝΤΑΓΜΑ» ΤΟ ΙΑΣΤΗΜΑ

ΠΡΟΣΚΛΗΣΗ ΓΙΑ ΤΗ ΙΕΞΑΓΩΓΗ ΚΛΗΡΩΣΗΣ ΓΙΑ ΤΗ ΙΑΘΕΣΗ ΤΟΥ ΧΩΡΟΥ ΠΟΛΛΑΠΛΩΝ ΧΡΗΣΕΩΝ ΣΤΟ ΣΤΑΘΜΟ ΜΕΤΡΟ «ΣΥΝΤΑΓΜΑ» ΤΟ ΙΑΣΤΗΜΑ

ΚΙΝΗΤΕΣ & ΟΡΥΦΟΡΙΚΕΣ ΕΠΙΚΟΙΝΩΝΙΕΣ 3 Ο ΚΕΦΑΛΑΙΟ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Transcript:

ΤΕΙ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΟΙΚΟΝΟΜΙΑΣ & ΙΟΙΚΗΣΗΣ ΤΜΗΜΑ ΙΑΧΕΙΡΙΣΗΣ ΠΛΗΡΟΦΟΡΙΩΝ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΠΡΟΗΓΜΕΝΑ USER-INTERFACES ΣΕ JAVA ΜΕ ΤΗΝ ΒΙΒΛΙΟΘΗΚΗ SWING ΠΑΠΑ ΟΠΟΥΛΟΥ ΧΡΙΣΤΙΝΑ Α. Ε. Μ. 1589 ΕΠΟΠΤΗΣ ΚΑΘΗΓΗΤΗΣ ΠΑΠΑ ΗΜΗΤΡΙΟΥ ΑΣΤΕΡΙΟΣ ΚΑΒΑΛΑ ΙΟΥΝΙΟΣ 2011 Εκπονηθείσα πτυχιακή εργασία απαραίτητη για την κτήση του βασικού πτυχίου

Περιεχόµενα Εισαγωγή σελ. 2 Ε ισκό ηση του Swing σελ. 4 Ε ισκό ηση του Layout Manager σελ. 10 Χειρισµός Συµβάντων σελ. 12 ηµιουργία µιας Α λής Εφαρµογής Swing σελ. 14 Καθορισµός του Layout Manager του Τοµέα Περιεχοµένων σελ. 20 Εργασία µε την JLabel σελ. 23 ηµιουργία ενός Α λού Κουµ ιού σελ. 29 Χρήση Εικονιδίων, HTML, και Μνηµονικών µε την JButton σελ. 33 ηµιουργία ενός Κουµ ιού Εναλλαγής σελ. 37 ηµιουργία Πλαισίων Ελέγχου σελ. 41 ηµιουργία Κουµ ιών Ε ιλογής σελ. 44 Εισαγωγή Κειµένου µε την JTextField σελ. 48 Εργασία µε την JList σελ. 54 Χρήση µιας Γραµµής Κύλισης σελ. 61 Χρήση της JScrollPane για Χειρισµό της Κύλισης σελ. 68 Εµφάνιση εδοµένων µέσα σε µια JTable σελ. 73 Χειρισµός Συµβάντων JTable σελ. 81 Εµφάνιση εδοµένων µέσα σε µία JTree σελ. 89 ηµιουργία ενός Κύριου Μενού σελ. 99 Συµ έρασµα σελ. 107 Βιβλιογραφία σελ. 108 1

Εισαγωγή Αυτή η εργασία αρουσιάζει µια σειρά εφαρµογών οι ο οίες ε ιδεικνύουν το Swing, την κύρια εργαλειοθήκη GUI της Java. Το Swing, το ο οίο έχει οριστεί α ό ένα λούσιο σύνολο ο τικών συστατικών και έχει µια α ολύτως ενσωµατωµένη και άκρως ροσαρµοσµένη αρχιτεκτονική, σας δίνει την δυνατότητα να δηµιουργήσετε οµαλές, αλλά και ταυτόχρονες συζεύξεις χρηστών. Το Swing ε ιτρέ ει ένα υψηλό βαθµό ροσαρµογής και υ οστηρίζει ολλά ροχωρηµένα χαρακτηριστικά µε τα ο οία µ ορείτε να εξειδικεύσετε τις εσωτερικές του εργασίες. Παρόλο ου είναι ολύ σηµαντικά αυτά τα χαρακτηριστικά δεν χρησιµο οιούνται καθηµερινά α ό τους ρογραµµατιστές και αντί αυτών σε αυτή την εργασία αρουσιάζονται θεµελιώδεις τεχνικές και συστατικά τα ο οία χρησιµο οιούνται ολύ συχνά. Παράλληλα, στόχος είναι να δείξουµε βασικά κοµµάτια του συνόλου συστατικών του Swing ου χρησιµο οιούνται σε καθηµερινή βάση στον ρογραµµατισµό. Μερικές α ό τις εφαρµογές ου θα αναλύσουµε είναι οι εξής: ηµιουργία µιας Α λής Εφαρµογής Swing Καθορισµός του Layout Manager του Τοµέα Περιεχοµένου Εργασία µε την JLabel ηµιουργία ενός Α λού Κουµ ιού Χρήση Εικονιδίων, HTML και Μνηµονικών µε την JButton ηµιουργία ενός Κουµ ιού Εναλλαγής ηµιουργία Πλαισίων Ελέγχου ηµιουργία Κουµ ιών Ε ιλογής Εισαγωγή Κειµένου µε την JTextField 2

Εργασία µε την JList Χρήση µιας Γραµµής Κύλισης Χρήση της JScrollPane για Χειρισµό της Κύλισης Εµφάνιση εδοµένων µέσα σε µια JTable Χειρισµός Συµβάντων JTable Εµφάνιση εδοµένων µέσα σε µία JTree ηµιουργία ενός Κύριου Μενού 3

Ε ισκό ηση του Swing Το Swing α οτέλεσε την α άντηση στις ανε άρκειες του αρχικού υ οσυστήµατος GUI Java, του Abstract Window Toolkit (AWT). Το AWT ορίζει ένα βασικό σύνολο συστατικών ου υ οστηρίζουν µια εύχρηστη, αλλά εριορισµένη σύζευξη γραφικών. Το AWT µεταφράζει τα διάφορα ο τικά συστατικά του, στα αντίστοιχα ισοδύναµα ή οµότιµα συστατικά για συγκεκριµένες λατφόρµες. Αυτό σηµαίνει ως η εµφάνιση και η αίσθηση ενός συστατικού AWT ορίζεται α ό την λατφόρµα και όχι α ό την Java. Για αυτό τον λόγω τα συστατικά του AWT χρησιµο οιούν εγγενείς όρους κώδικα και αναφέρονται ως βαρέος τύ ου. Η χρήση των εγγενών οµότιµων οδήγησε σε αρκετά ροβλήµατα. Αρχικά, λόγω των διαφορών ανάµεσα σε λειτουργικά συστήµατα, ένα συστατικό µ ορούσε να έχει διαφορετική εµφάνιση ή ακόµα και να λειτουργεί διαφορετικά σε διαφορετικές λατφόρµες. Αυτή η διαφορά α ειλούσε την γενική φιλοσοφία της Java : γράφεται µια φορά, εκτελείται αντού. Ε ίσης, η εµφάνιση και η αίσθηση κάθε συστατικού ήταν σταθερή ε ειδή οριζόταν α ό την λατφόρµα και δεν µ ορούσε να αλλάξει εύκολα. Ακόµη, η χρήση συστατικών βαρέος τύ ου έθετε κά οιους εριορισµούς ό ως: ένα συστατικό βαρέος τύ ου είναι άντα ορθογώνιο και αδιαφανές. Λίγο µετά την αρχική έκδοση της Java, έγινε ροφανές ότι οι εριορισµοί ου έθετε το AWT ήταν αρκετά σοβαροί και ως χρειαζόταν µια καλύτερη ροσέγγιση. Την λύση ήρθε να δώσει το Swing το ο οίο εισήχθη το 1997 και εριλαµβανόταν σαν τµήµα του Java Foundation Classes (JFC). Το Swing ήταν αρχικά διαθέσιµο για χρήση µε την Java 1.1 σαν µια ξεχωριστή βιβλιοθήκη, ωστόσο α ό την Java 1.2, το Swing ενσωµατώθηκε λήρως στην Java. Το Swing ε ιλύει τους εριορισµούς ου σχετίζονται µε τα συστατικά του AWT µέσω της χρήσης δύο βασικών χαρακτηριστικών : συστατικά ελαφρού τύ ου και συνδέσιµη εµφάνιση και αίσθηση. Παρόλο ου αυτά τα δύο 4

χαρακτηριστικά είναι διαφανή στον ρογραµµατιστή είναι τα θεµέλια της φιλοσοφίας σχεδίασης του Swing και ο λόγος ου υ άρχει δύναµη και ευελιξία. Με ορισµένες εξαιρέσεις τα συστατικά του Swing είναι ελαφρού τύ ου. Αυτό σηµαίνει ως ένα συστατικό είναι γραµµένο εξ ολοκλήρου σε Java δεν βασίζεται σε οµότιµα για συγκεκριµένες λατφόρµες. Τα συστατικά ελαφρού τύ ου έχουν κά οια λεονεκτήµατα τα ο οία εριλαµβάνουν την α οδοτικότητα και την ευελιξία. Για αράδειγµα ένα συστατικό ελαφρού τύ ου µ ορεί να είναι διαφανές, κάτι ου ε ιτρέ ει την χρήση µη ορθογώνιων σχηµάτων. Ε ίσης ε ειδή τα συστατικά ελαφρού τύ ου δεν µεταφράζονται οµότιµα για συγκεκριµένη λατφόρµα η εµφάνιση, αλλά και η αίσθηση κάθε συστατικού καθορίζεται α ό το Swing και όχι α ό το υ οκείµενο λειτουργικό σύστηµα, αυτό σηµαίνει ως κάθε συστατικό θα εργάζεται µε έναν συγκεκριµένο τρό ο σε όλες τις λατφόρµες. Ε ίσης, κάθε συστατικό Swing α οδίδεται α ό κώδικα Java και όχι α ό οµότιµα για κάθε συγκεκριµένη λατφόρµα και είναι ολύ λογικό να διαχωρίσετε την εµφάνιση και την αίσθηση ενός συστατικού ου αυτό είναι ακριβώς ότι κάνει το Swing. Ένα ολύ σηµαντικό λεονέκτηµα ου αρέχει ο διαχωρισµός της εµφάνισης και της αίσθησης είναι εφικτό να αλλάξει τον τρό ο ου α οδίδεται ένα συστατικό χωρίς να ε ηρεάσει κανένα άλλο χαρακτηριστικό. Πιο α λά, µ ορείτε να συνδέσετε µια νέα εµφάνιση και αίσθηση για ένα δεδοµένο συστατικό χωρίς να δηµιουργηθεί κά οια αρενέργεια στον κώδικα ου ήδη χρησιµο οιεί αυτό το συστατικό. Η Java αρέχει εµφανίσεις και αισθήσεις ό ως το µεταλλικό (metal) και το Motif, τα ο οία διατίθεται σε όλους τους χρήστες του Swing. Η µεταλλική εµφάνιση και αίσθηση καλείται ε ίσης αίσθηση και εµφάνιση της Java. Είναι µια εµφάνιση και αίσθηση ανεξάρτητη λατφόρµας ου διατίθεται σε όλα τα εριβάλλοντα εκτέλεσης της Java. Η συνδέσιµη εµφάνιση και αίσθηση του Swing γίνεται δυνατή ε ειδή το Swing χρησιµο οιεί µια τρο ο οιηµένη έκδοση της κλασικής αρχιτεκτονικής µοντέλου ροβολής ελεγκτή (model view controller, MVC). Στην ορολογία MVC το µοντέλο αντιστοιχεί στις 5

ληροφορίες κατάστασης οι ο οίες σχετίζονται µε το συστατικό. Στην ερί τωση ενός λαισίου ελέγχου, το µοντέλο εριέχει ένα εδίο το ο οίο δηλώνει αν το λαίσιο είναι ε ιλεγµένο ή όχι. Η ροβολή καθορίζει ως εµφανίζεται το συστατικό στην οθόνη, εριλαµβανοµένων και των χαρακτηριστικών της ροβολής ου ε ηρεάζονται α ό την τρέχουσα κατάσταση του µοντέλου. Ο ελεγκτής καθορίζει ως το συστατικό αντιδρά στον χρήστη. Αν ο ελεγκτής κάνει κλικ σε ένα λαίσιο ελέγχου, ο ελεγκτής αντιδρά αλλάζοντας το µοντέλο µε τέτοιο τρό ο ώστε να αντανακλά την ε ιλογή του χρήστη (ε ιλεγµένο ή µη ε ιλεγµένο). Αυτό έχει ως α οτέλεσµα να ενηµερώνεται η ροβολή. ιαχωρίζοντας ένα συστατικό σε µοντέλο, ροβολή και ελεγκτή η υλο οίηση κάθε στοιχείου µ ορεί να αλλάξει δίχως να ε ηρεάσει κά οιο άλλο. Αν και η αρχιτεκτονική MVC και οι αρχές ου την διέ ουν είναι σαφείς ωστόσο, το ε ί εδο διαχωρισµού ανάµεσα στην ροβολή και τον ελεγκτή δεν ήταν ε ωφελές για τα συστατικά του Swing. Το Swing χρησιµο οιεί µια τρο ο οιηµένη έκδοση του MVC ου συνδυάζει την ροβολή και τον ελεγκτή σε µια λογική οντότητα η ο οία λέγεται αντι ρόσω ος UI (UI delegate). Η ροσέγγιση του Swing καλείται είτε αρχιτεκτονική µοντέλου αντι ροσώ ου, είτε αρχιτεκτονική διασ άσιµου µοντέλου. Το Swing εξαλείφει αρκετούς α ό τους εριορισµούς του AWT, το Swing όµως δεν µ ορεί να αντικαταστήσει το AWT. Μ ορεί όµως να κτίσει άνω στα θεµέλια ου αρέχονται α ό το AWT. Το Swing χρησιµο οιεί τον ίδιο µηχανισµό χειρισµού συµβάντων µε το AWT, έτσι το AWT συνεχίζει να α οτελεί ένα κρίσιµο σηµείο της Java. Ένα Swing GUI α οτελείται α ό δύο βασικά στοιχεία, τα συστατικά και τους υ οδοχείς. Η διαφορά αυτών των στοιχείων έγκειται στον σκο ό χρήσης τους. Ό ως αναφέραµε, ένα συστατικό είναι ένας ανεξάρτητος ο τικός 6

µηχανισµός ό ως ένα κουµ ί ή ένα εδίο κειµένου. Ένας υ οδοχέας εριέχει µια οµάδα συστατικών, είναι ένας ειδικός τύ ος συστατικού ου έχει σχεδιαστεί ροκειµένου να εριέχει και άλλα συστατικά. Ε ίσης για να εµφανιστεί ένα συστατικό θα ρέ ει να εριέχεται µέσα σ έναν υ οδοχέα. Με αυτό τον τρό ο όλα τα Swing θα έχουν και έναν υ οδοχέα και ε ειδή οι υ οδοχείς είναι συστατικά, ένας υ οδοχέας µ ορεί να εριέχει και άλλους υ οδοχείς. Αυτό ε ιτρέ ει στο Swing να ορίζει κάτι ου καλείται ιεραρχία υ οδοχέων, στην κορυφή της ο οίας ρέ ει να βρίσκεται ο υ οδοχέας ανώτατου ε ι έδου. Τα συστατικά Swing αράγονται α ό την κλάση JComponent η ο οία αρέχει την λειτουργικότητα ου είναι συνηθισµένη σε όλα τα συστατικά και υ οστηρίζει την συνδέσιµη εµφάνιση και αίσθηση. Η JComponent κληρονοµεί τις κλάσεις AWT Container και Component. Έτσι ένα συστατικό Swing κτίζεται ε ί ενός συστατικού AWT και είναι συµβατό µ αυτό. Όλα τα συστατικά Swing αρίστανται α ό κλάσεις οι ο οίες ορίζονται µέσα στο ακέτο javax.swing. Ο ίνακας δείχνει ορισµένες κλάσεις για συστατικά Swing εριλαµβανοµένων και αυτών ου χρησιµο οιούνται σαν υ οδοχείς. JApplet JButton JComponent JFrame JOptionPane JTextArea JRadioButton JTextField JCheckBox JLabel JTable JPanel JList JPanel JTree JSlider JSpinner JToggleButton JScrollPane JRootPane JTabbedPane 7

Υ οδοχείς Το Swing ορίζει δύο τύ ους υ οδοχέων. Ο ρώτος τύ ος είναι οι υ οδοχείς ανώτατου ε ι έδου: JFrame, JApplet, JWindow και JDialog οι ο οίοι δεν κληρονοµούν τις κλάσεις AWT Container και Component. Αντίθετα µε τα άλλα συστατικά Swing τα ο οία είναι ελαφρού τύ ου, οι υ οδοχείς ανώτατου ε ι έδου είναι µια ειδική ερί τωση στην βιβλιοθήκη συστατικών Swing. Ένας υ οδοχέας ανώτατου ε ι έδου ρέ ει να βρίσκεται στην κορυφή µιας ιεραρχίας υ οδοχέων και οτέ δεν εριέχεται µέσα σε έναν άλλο υ οδοχέα. Ε ίσης, κάθε ιεραρχία υ οδοχέων ρέ ει να αρχίζει µε έναν υ οδοχέα ανώτατου ε ι έδου. Ο υ οδοχέας ανώτατου ε ι έδου ου χρησιµο οιείται συχνά είναι ο JFrame ενώ αυτός ου χρησιµο οιείται για applets είναι ο JApplet. Ο δεύτερος τύ ος υ οδοχέων είναι οι υ οδοχείς ελαφρού τύ ου, οι ο οίοι κληρονοµούν την JComponent ό ως είναι οι : JPanel, JScrollPane και JRootPane. Οι υ οδοχείς ελαφρού τύ ου χρησιµο οιούνται συχνά ώστε να οργανώνουν οµαδικά και να διαχειρίζονται οµάδες σχετικών συστατικών και αυτό γιατί ένας υ οδοχέας ελαφρού τύ ου µ ορεί να εριέχεται µέσα σ ένα άλλον υ οδοχέα. Οι Τοµείς Υ οδοχέα Ανώτατου Ε ι έδου Κάθε υ οδοχέας ανώτατου ε ι έδου ορίζει ένα σύνολο τοµέων. Στην κορυφή της ιεραρχίας βρίσκεται ένα στιγµιότυ ο JRootPane. Το JRootPane είναι ένας υ οδοχέας ελαφρού τύ ου ου σκο ό έχει να διαχειρίζεται άλλους τοµείς. Ακόµα βοηθά στη διαχείριση της ροαιρετικής γραµµής µενού. Οι τοµείς ου α οτελούν τον ριζικό τοµέα καλούνται τοµέας καθρέ της, τοµέας εριεχοµένου και διαστρωµατωµένος τοµέας. Ο τοµέας καθρέ της είναι ο τοµέας ανώτατου ε ι έδου ο ο οίος βρίσκεται άνω α ό όλους τους άλλους τοµείς τους ο οίους καλύ τει λήρως. Ε ιτρέ ει την διαχείριση συµβάντων οντικιού και ε ηρεάζει όλο τον υ οδοχέα. Συνήθως δεν χρειάζεται να χρησιµο οιείτε τον τοµέα καθρέ τη α ευθείας. Ο 8

διαστρωµατωµένος τοµέας ε ιτρέ ει στα συστατικά να έχει µια τιµή βάθους η ο οία καθορίζει οιο συστατικό ε ικαλύ τει το άλλο. Ε ίσης εριέχει τον τοµέα εριεχοµένου και την γραµµή µενού. Παρόλο ου ο τοµέας καθρέ της και ο διαστρωµατωµένος τοµέας είναι ανα όσ αστα τµήµατα της λειτουργίας ενός υ οδοχέα ανώτατου ε ι έδου και εξυ ηρετούν σηµαντικούς σκο ούς το µεγαλύτερο κοµµάτι της λειτουργίας τους γίνεται στο αρασκήνιο. Η εφαρµογή αλληλε ιδρά ερισσότερο µε τον τοµέα εριεχοµένου και αυτό γιατί είναι ο τοµέας στον ο οίο ροστίθεται ο τικά συστατικά. (.χ. ένα κουµ ί σε έναν υ οδοχέα ανώτατου ε ι έδου ροστίθεται στον τοµέα εριεχοµένου, έτσι ο τοµέας εριεχοµένου έχει τα συστατικά εκείνα τα ο οία αλληλε ιδρά ο χρήστης. 9

Ε ισκό ηση του Layout Manager Στην Java η το οθέτηση συστατικών µέσα σε σ έναν υ οδοχέα ελέγχεται α ό έναν διαχειριστή διάταξης (layout manager). Η Java ροσφέρει αρκετούς διαχειριστές διάταξης ολλοί α ό τους ο οίους αρέχονται α ό το AWT (µέσα στο java.awt) αλλά το Swing ροσθέτει µερικούς δικούς του µέσα στο javax.swing. Όλοι οι διαχειριστές διάταξης είναι στιγµιότυ α µιας κλάσης ου υλο οιεί την σύζευξη layout manager. Μερικοί α ό τους διαχειριστές διάταξης είναι: java.awt.flowlayout : µια α λή διάταξη η ο οία το οθετεί τα συστατικά α ό τα αριστερά ρος τα δεξιά και α ό ε άνω ρος τα κάτω. java.awt.borderlayout : το οθετεί συστατικά στο κέντρο ή στα άκρα του υ οδοχέα και είναι ροε ιλεγµένη διάταξη για ένα τοµέα εριεχοµένου. java.awt.gridlayout : διατάσσει συστατικά µέσα σ ένα λέγµα java.swing.boxlayout : διατάσσει συστατικά κατακόρυφα οριζόντια µέσα σ ένα λαίσιο. ή FlowLayout: είναι ο διαχειριστής διάταξης ροής ό ου διατάσσει τα συστατικά γραµµή ρος γραµµή, α ό άνω ρος τα κάτω. Όταν γεµίσει µια γραµµή η διάταξη ροχωρεί στην ε όµενη γραµµή. BorderLayout: είναι ο ροε ιλεγµένος διαχειριστής διάταξης για τον τοµέα εριεχοµένου. Υλο οιεί ένα στυλ διάταξης το ο οίο ορίζει έντε θέσεις ό ου µ ορεί να ροστεθεί ένα συστατικό. Η ρώτη είναι το κέντρο ενώ οι υ όλοι ες τέσσερις λευρές καλούνται βοράς, νότος, ανατολή και δύση. GridLayout: δηµιουργεί ένα λέγµα ορθογωνίων κελιών µέσα στα ο οία το οθετούνται τα συστατικά. Τα µεγέθη των κελιών µέσα στο λέγµα είναι 10

ίδια και ένα συστατικό ου το οθετείται µέσα σ ένα κελί αίρνει το µέγεθος ου α αιτείται ώστε να γεµίσει τις διαστάσεις του κελιού. Οι διαστάσεις του λέγµατος καθορίζονται µε την έκφραση: new GridLayout (5,2) ου δηµιουργεί ένα λέγµα µε 5 γραµµές και 2 στήλες. BoxLayout: ο διαχειριστής διάταξης BoxLayout αρέχει έναν εύκολο τρό ο δηµιουργίας οµάδων συστατικών, τα ο οία οργανώνονται σε λαίσια. Συνήθως ο BoxLayout δεν χρησιµο οιείται σαν διαχειριστής διάταξης για τον τοµέα εριεχοµένου, αλλά αντί για αυτόν θα δηµιουργείται ένα ή ερισσότερα άνελ ου χρησιµο οιούν τον BoxLayout και θα ροσθέτουν συστατικά στο άνελ και στη συνέχεια θα ροσθέτουν τα άνελ στον τοµέα εριεχοµένου. 11

Χειρισµός Συµβάντων Ο χειρισµός συµβάντων α οτελεί ένα σηµαντικό κοµµάτι στα ερισσότερα ρογράµµατα Swing. Τα ιο ολλά συστατικά Swing α οκρίνονται σε είσοδο α ό τον χρήστη και τα συµβάντα ου αράγονται α ό αυτές τις αλληλε ιδράσεις ρέ ει να τύχουν χειρισµού. Ό ως είναι γνωστό ένα συµβάν αράγεται όταν ο χρήστης κάνει κλικ σ ένα κουµ ί, ατήσει ένα λήκτρο α ό το ληκτρολόγιο ή αν ε ιλέξει ένα στοιχείο α ό µια λίστα. Ε ίσης, συµβάντα αράγονται µε τρό ους οι ο οίοι δεν σχετίζονται άµεσα µε είσοδο α ό τον χρήστη, ό ως όταν χτυ ά ένα χρονόµετρο. Ο µηχανισµός συµβάντων ου χρησιµο οιείται α ό την Swing καλείται µοντέλο αντι ροσώ ευσης συµβάντος. Πιο α λά, µια ηγή αράγει ένα συµβάν και το στέλνει σε έναν ή ερισσότερους ακροατές. Με βάση αυτό το σχήµα, ο ακροατής εριµένει µέχρι να λάβει ένα συµβάν. Μόλις φτάσει το συµβάν ο ακροατής ε εξεργάζεται το συµβάν και µετά ε ιστρέφει. Η σχεδίαση αυτή αρέχει ένα ολύ σηµαντικό λεονέκτηµα : η λογική της εφαρµογής ου ε εξεργάζεται συµβάντα είναι ξεχωριστή α ό την λογική της σύζευξης χρήστη ου αράγει τα συµβάντα. Συµβάντα Στο µοντέλο αντι ροσώ ευσης, ένα συµβάν είναι ένα αντικείµενο το ο οίο εριγράφει µια αλλαγή κατάστασης σε µια ηγή. Μ ορεί να αραχθεί ως συνέ εια του γεγονότος ότι ένα άτοµο αλληλε ιδρά µε ένα στοιχείο σε µια γραφική σύζευξη χρήστη ή µ ορεί να αραχθεί υ ό τον έλεγχο του ρογράµµατος. Η υ ερκλάση για όλα τα συµβάντα είναι η java.util.eventobject. Πολλά συµβάντα δηλώνονται στην java.awt.event. Αυτά είναι τα συµβάντα ου ορίζονται α ό το AWT, αν και το Swing χρησιµο οιεί εξίσου αυτά τα συµβάντα, ορίζει ε ίσης και αρκετά δικά του τα ο οία βρίσκονται στην java.swing.event. 12

Πηγές Συµβάντων Μια ηγή συµβάντος είναι ένα αντικείµενο το ο οίο αράγει ένα συµβάν. Όταν µια ηγή αράγει ένα συµβάν ρέ ει να στείλει το συµβάν αυτό σε όλους τους εγγεγραµµένους ακροατές. Για να δεχτεί λοι όν ένας ακροατής ένα συµβάν ρέ ει ρώτα να κάνει εγγραφή αυτού του συµβάντος. Οι ακροατές εγγράφονται σε µια ηγή καλώντας την µέθοδο addtypelistener() στο αντικείµενο ηγής συµβάντος. Η γενική µορφή είναι : public void addtypelistener(typelistener el) ό ου Type είναι το όνοµα του συµβάντος και el είναι µια αναφορά στον ακροατή συµβάντος. Μια ηγή ρέ ει να αρέχει και µια µέθοδο η ο οία να ε ιτρέ ει σε έναν ακροατή να ακυρώνει την εγγραφή του σ ένα συγκεκριµένο τύ ο συµβάντος. Η µέθοδος ου υλο οιεί κάτι τέτοιο είναι η : public void remove TypeListener(TypeListener el). Οι µέθοδοι ου ροσθέτουν ή αφαιρούν ακροατές αρέχοντα α ό την ηγή ου αράγει συµβάντα. Έτσι, η κλάση JButton αρέχει µια µέθοδο µε όνοµα addactionlistener(), η ο οία ροσθέτει έναν ακροατή ενέργειας ου χειρίζεται το συµβάν ενέργειας το ο οίο αράγεται όταν ατιέται το κουµ ί. Ακροατές Συµβάντων Ένας ακροατής είναι ένα αντικείµενο το ο οίο ειδο οιείται όταν συµβαίνει ένα συµβάν. Ο ακροατής έχει δύο βασικές α αιτήσεις. Η ρώτη είναι ως ρέ ει να εγγραφεί σε µία ή ερισσότερες ηγές ροκειµένου να δέχεται ειδο οιήσεις για ένα συγκεκριµένο τύ ο συµβάντος ενώ η δεύτερη είναι ως ρέ ει να υλο οιεί µια µέθοδο για να δέχεται και να ε εξεργάζεται αυτό το συµβάν. Γενικότερα υ άρχει µια γενική και ολύ σηµαντική αρχή ου ρέ ει να ισχύει για χειριστές συµβάντων. Ένας χειριστής συµβάντος ρέ ει να κάνει τη δουλειά του γρήγορα και µετά να ε ιστρέφει. εν ρέ ει να εµ λακεί σε µια χρονοβόρα εργασία και αν το κάνει αυτό θα ε ιβραδύνει όλη τη εφαρµογή. 13

ηµιουργία µια α λής Εφαρµογής Swing Υ άρχουν δυο τύ οι ρογραµµάτων Java στα ο οία χρησιµο οιείται συνήθως το Swing. Ο ρώτος τύ ος είναι το applet ενώ ο δεύτερος είναι οι εφαρµογές ε ιφάνειας εργασίας. Παρόλο ου το Swing είναι εύκολο στη χρήση, τα ρογράµµατα Swing διαφέρουν α ό τα ρογράµµατα ου βασίζονται στην κονσόλα και α ό τα ρογράµµατα GUI τα ο οία βασίζονται στο AWT. Έτσι ένα ρόγραµµα Swing χρησιµο οιεί το σύνολο συστατικών Swing για System.in και System.out ό ως συµβαίνει σε µια εφαρµογή ου βασίζεται στην κονσόλα, αλλά α ό ο τικούς µηχανισµούς ό ως κουµ ιά, µηχανισµοί αυξοµείωσης και οι γραµµές κύλισης. Ε ίσης το Swing έχει ειδικές α αιτήσεις ου σχετίζονται µε την ε εξεργασία νηµάτων. Βήµα ρος Βήµα Για να δηµιουργήσετε µια εφαρµογή Swing ε ιφάνειας εργασίας ακολουθείστε τα εξής βήµατα: 1. ηµιουργήστε έναν υ οδοχέα ανώτατου ε ι έδου για το ρόγραµµα. Αυτός θα είναι ένα στιγµιότυ ο JFrame 2. Ορίστε το µέγεθος του λαισίου, καλώντας την setsize() 3. Ορίστε την ροε ιλεγµένη λειτουργία κλεισίµατος καλώντας την setdefaultclose-operation() 4. ηµιουργήστε ένα ή και αρα άνω συστατικά 5. Προσθέστε τα συστατικά στον τοµέα εριεχοµένου του λαισίου καλώντας την add() 6. Εµφανίστε το λαίσιο καλώντας την setvisible() 7. Σε όλες τις ερι τώσεις το Swing GUI ρέ ει να δηµιουργηθεί ε ί του νήµατος α οστολής συµβάντος µέσω της χρήσης της invokelater(). 14

Έτσι τα ροηγούµενα βήµατα θα ρέ ει να εκτελεστούν α ό το νήµα α οστολής συµβάντος. Όλες οι εφαρµογές Swing ρέ ει να έχουν ένα υ οδοχέα βαρέος τύ ου στην κορυφή της ιεραρχίας υ οδοχέων. Ο υ οδοχέας αυτός ανώτατου ε ι έδου εριέχει όλους τους άλλους υ οδοχείς και τα συστατικά ου σχετίζονται µε την κάθε εφαρµογή. Μια εφαρµογή Swing θα χρησιµο οιεί τυ ικά ένα στιγµιότυ ο JFrame ως υ οδοχέα ανώτατου ε ι έδου. Η JFrame κληρονοµεί τις αρακάτω κλάσεις : Component, Container, Window και Frame και ορίζει ολλούς δηµιουργούς. JFrame(String name): ο τίτλος του αραθύρου µεταβιβάζεται µέσα στη name. Το µέγεθος ου λαισίου µ ορεί να τεθεί καλώντας την setsize() ό ως φαίνεται αρακάτω: void setsize(int width, int height) : οι αράµετροι width και height καθορίζουν το λάτος και το ύψος του αραθύρου σε pixels. Συνήθως, όταν κλείνει ένα αράθυρο ανώτατου ε ι έδου (ό ως όταν ένας χρήστης ατήσει το κουµ ί κλεισίµατος - εξόδου) το αράθυρο αφαιρείται µεν α ό την οθόνη, αλλά η εφαρµογή συνεχίζει να τρέχει, δεν τερµατίζει. Υ άρχουν δύο τρό οι ροκειµένου να τερµατίζει η εφαρµογή µόλις κλείσει το αράθυρο. Ο ιο εύκολος τρό ος είναι να καλέσετε την setdefaultcloseoperation() ου η γενική της µορφή είναι : void setdefaultcloseoperation(int what), η τιµή ου µεταβιβάζεται στην what καθορίζει τι θα συµβεί όταν κλείσει το αράθυρο. Οι έγκυρες τιµές ου µ ορεί να άρει είναι οι εξής: 15

JFrame.DISPOSE_ON_CLOSE JFrame.EXIT_ON_CLOSE JFrame_HIDE_ON_CLOSE JFrame_DO_NOTHING_ON_CLOSE Αυτές οι σταθερές δηλώνονται στην WindowConstants ου είναι µια σύζευξη η ο οία δηλώνεται στην java.swing, η ο οία υλο οιείται α ό την JFrame και ορίζει ολλές σταθερές οι ο οίες σχετίζονται µε την Swing. Για να τερµατίσει ένα ρόγραµµα όταν κλείσει το αράθυρο χρησιµο οιείται η EXIT_ON_CLOSE. Το Swing ορίζει ολλές κλάσεις συστατικών οι ο οίες υ οστηρίζουν κουµ ιά, λαίσια ελέγχου, εδία κειµένου κ.ά. Στο αράδειγµα ου ακολουθεί χρησιµο οιείται µόνο η JLabel. Αυτό είναι το ιο α λό συστατικό του Swing διότι, δεν δέχεται είσοδο α ό τον χρήστη αλλά, εµφανίζει ληροφορίες οι ο οίες µ ορούν και α οτελούνται α ό κείµενο, α ό ένα εικονίδιο ή και α ό τα δυο ταυτόχρονα. JLabel (String str): δηµιουργείται µια ετικέτα η ο οία εµφανίζει το string ου µεταβιβάζεται µέσα στη str. Αφού δηµιουργήσετε ένα συστατικό, ρέ ει να ροστεθεί σ έναν υ οδοχέα. Όλοι οι υ οδοχείς ανώτατου ε ι έδου έχουν ένα τοµέα εριεχοµένου στον ο οίο α οθηκεύονται τα συστατικά. Προκειµένου λοι όν να ροσθέσουµε ένα συστατικό σ ένα λαίσιο θα ρέ ει να το α οθηκεύσουµε στον τοµέα εριεχοµένου του λαισίου. Για να είναι αυτό εφικτό ρέ ει να καλέσετε την add() ε ί µιας αναφοράς της JFrame Component add (Component comp): όταν το λαίσιο γίνει ορατό, εµφανίζεται το συστατικό comp ου η θέση του θα καθοριστεί α ό τον διαχειριστή διάταξης. Προε ιλεγµένα, ο τοµέας εριεχοµένου ου σχετίζεται µε µια JFrame χρησιµο οιεί µια διάταξη εριθωρίου(border). Η 16

συγκεκριµένη έκδοση της add() σας ε ιτρέ ει να καθορίσετε µία α ό τις εριοχές εριθωρίου. Όταν το συστατικό ροστίθεται στο κέντρο, το µέγεθός του ρυθµίζεται αυτόµατα για να ταιριάζει µε το µέγεθος του κέντρου. Αν θέλετε να εµφανίσετε το λαίσιο και τα συστατικά ου έχει, ρέ ει να καλέσετε την setvisible() µε τον εξής τρό ο: void setvisible(boolean show), αν η show είναι true τότε το λαίσιο εµφανίζεται, αν όχι (δηλαδή είναι false) τότε το λαίσιο είναι κρυµµένο. Υ άρχει ένας σηµαντικός εριορισµός ου ρέ ει να τηρείτε όταν χρησιµο οιείται το Swing. Όλη η αλληλε ίδραση µε τα ο τικά συστατικά του Swing ρέ ει να γίνεται µέσω του νήµατος α οστολής συµβάντος και όχι στο κύριο νήµα της εφαρµογής. Αυτό εριλαµβάνει την αρχική δηµιουργία του GUI. Ο λόγος είναι ο εξής: τα ρογράµµατα Swing καθοδηγούνται α ό συµβάντα. Όταν ένας χρήστης αλληλε ιδρά µ ένα συστατικό αράγεται ένα συµβάν. Ένα συµβάν µεταβιβάζεται στην εφαρµογή καλώντας ένα χειριστή συµβάντος, ο ο οίος ορίζεται α ό την εφαρµογή. Αυτό σηµαίνει ως ο χειριστής εκτελείται στο νήµα α οστολής συµβάντος ου αρέχεται α ό το Swing και όχι στο κύριο νήµα της εφαρµογής. Έτσι λοι όν αν και οι χειριστές συµβάντων ορίζονται α ό το ρόγραµµά σας καλούνται ε ί ενός νήµατος ου δεν δηµιουργήθηκε α ό το δικό σας ρόγραµµα. Για να µην υ άρχουν αυτά τα ροβλήµατα ό ως το ρόβληµα να υ άρχουν δύο διαφορετικά νήµατα ου ροσ αθούν να ενηµερώσουν το ίδιο συστατικό ταυτόχρονα, όλα τα συστατικά GUI του Swing ρέ ει να δηµιουργούνται και να ενηµερώνονται α ό το νήµα α οστολής συµβάντος και όχι α ό το κύριο νήµα της εφαρµογής. Όµως η main() εκτελείται στο κύριο νήµα και γι αυτό το λόγω δεν µ ορεί να υλο οιήσει α ευθείας ένα Swing GUI. Αντί γι αυτό λοι όν το ρόγραµµα ρέ ει να δηµιουργήσει ένα αντικείµενο Runnable ου να εκτελείται ε ί ενός νήµατος α οστολής συµβάντος και να υ οχρεώσει το αντικείµενο να δηµιουργεί το GUI. Για να ε ιτρέψετε στον κώδικα GUI να δηµιουργηθεί στο νήµα α οστολής συµβάντος ρέ ει να χρησιµο οιήσετε 17

µία α ό τις δύο µεθόδους οι ο οίες ορίζονται α ό την κλάση Swing-Utilities. Αυτές οι µέθοδοι είναι οι invokelater() και invokeandwait() και µ ορείτε να τις καλέσετε µε τον εξής τρό ο: static void invokelater(runnable obj) και static void invokeandwait(runnable obj) throws InterruptedException, InvocationTargetException, εδώ obj είναι ένα αντικείµενο Runnable, η µέθοδος run() του ο οίου θα καλείται α ό το νήµα συµβάντος. Η διαφορά στις δυο µεθόδους είναι ότι η invokelater() ε ιστρέφει αµέσως ενώ η invokeandwait() εριµένει έως ότου να ε ιστρέψει η obj.run(). Ε ιλογές και Εναλλακτικές Λύσεις Ο ροε ιλεγµένος διαχειριστής διάταξης για τον τοµέα εριεχοµένου ενός JFrame είναι ο BorderLayout ο ο οίος χρησιµο οιεί ένα στυλ διάταξης ου ορίζει έντε θέσεις στις ο οίες ροσθέτει ένα συστατικό. Η ρώτη είναι στο κέντρο (center), ενώ οι άλλες τέσσερις είναι οι λευρές, δηλαδή τα εριθώρια ου λέγονται βορράς(north), νότος(south), ανατολή(east) και δύση(west). Προε ιλεγµένα, όταν ροσθέτετε ένα συστατικό στον τοµέα εριεχοµένου, ροσθέτετε το συστατικό στο κέντρο. Εάν θέλετε να καθορίσετε µια α ό τις άλλες θέσεις µ ορείτε να χρησιµο οιήσετε την εξής µορφή της add(), void add(component comp, Object loc) εδώ comp είναι το συστατικό ου θα ροστεθεί και loc καθορίζει την θέση στην ο οία θα ροστεθεί. Η τιµή loc ρέ ει να είναι: BorderLayout. CENTER BorderLayout. NORTH BorderLayout. SOUTH BorderLayout. EAST BorderLayout.WEST 18

Γενικά το BorderLayout είναι ολύ χρήσιµο, όταν χρησιµο οιείται ένα JFrame το ο οίο εριέχει ένα συγκεκριµένο συστατικό και έχει ένα συστατικό κεφαλίδας και/ή ένα υ οσέλιδου το ο οίο σχετίζεται µε αυτό. 19

Καθορισµός του Layout Manager του Τοµέα Περιεχοµένων Προε ιλεγµένα, ο τοµέας εριεχοµένου ου σχετίζεται µε ένα JFrame ή µε ένα JApplet, χρησιµο οιεί µια διάταξη εριθωρίων ου ενθυλακώνεται στον διαχειριστή διάταξης BorderLayout. Παρόλο ου µια διάταξη εριθωρίων είναι χρήσιµη σε ολλές εφαρµογές υ άρχουν ερι τώσεις, ου ένας α ό τους άλλους διαχειριστές διάταξης είναι ιο βολικός. Σε µια τέτοια ερί τωση, ένας διαχειριστής διάταξης µ ορεί να αλλάξει setlayout(). καλώντας την Βήµα ρος Βήµα Για να αλλάξετε τον διαχειριστή διάταξης κάντε τα εξής βήµατα: 1. Αν είναι α αραίτητο εισάγετε την java.awt για να ροσ ελάσετε τον διαχειριστή διάταξης ου θέλετε. 2. ηµιουργήστε ένα στιγµιότυ ο του νέου διαχειριστή διάταξης. 3. Καλέστε την setlayout() ε ί του στιγµιότυ ου JFrame ή JApplet, µεταβιβάζοντας σ αυτό το νέο διαχειριστή διάταξης. Συζήτηση Ε ίσης ένας α ό τους σηµαντικότερους και δηµοφιλέστερους διαχειριστές διάταξης είναι ο FlowLayout. Ο εν λόγω διαχειριστής διάταξης διατάσσει αυτόµατα τα συστατικά γραµµή ρος γραµµή α ό άνω ρος τα κάτω. Όταν γεµίσει µια γραµµή η διάταξη ροχωρεί στην ε όµενη γραµµή. υστυχώς όµως υ άρχουν δύο µειονεκτήµατα. Πρώτον δίνει τον ελάχιστο έλεγχο ε ί της ακριβούς το οθέτησης των συστατικών και δεύτερον σε ερί τωση ου αλλάξετε το µέγεθος του λαισίου, αυτοµάτως αλλάζει και η θέση των συστατικών. Ο FlowLayout αρά τους εριορισµούς ου έχει είναι συχνά κατάλληλος για α λά GUI. Ακόµη ο FlowLayout δηµιουργεί µια διάταξη ροής ου κεντράρει αυτόµατα τα συστατικά στην γραµµή και χωρίζει κάθε συστατικό α ό το ε όµενο µε έντε pixels και ρος τις τέσσερις διευθύνσεις. 20

Για να ορίσετε τον διαχειριστή διάταξης θα ρέ ει να καλέσετε την setlayout() ό ως αρακάτω void setlayout(layoutmanager Im) ο νέος διαχειριστής διάταξης µεταβιβάζεται µέσα στην Im. Όταν καλέσετε την setlayout() ε ί ενός υ οδοχέα ανώτατου ε ι έδου εριλαµβανοµένων των JFrame και JApplet, έχει ως α οτέλεσµα τον καθορισµό του τοµέα εριεχοµένου. Ε ιλογές και Εναλλακτικές Λύσεις Προε ιλεγµένα το FlowLayout κεντράρει συστατικά µέσα σε µια γραµµή και χωρίζει κάθε συστατικό α ό το ε όµενο σε έντε pixels. Χρησιµο οιώντας έναν α ό τους αρακάτω δηµιουργούς FlowLayout µ ορούµε να αλλάξουµε αυτές τις ροε ιλογές α) FlowLayout(int horizalign) και β) FlowLayout (int horizalign, int horizsep, int VertSep). Η οριζόντια στοίχιση συστατικών µέσα σε µια γραµµή καθορίζεται α ό την horizalign η ο οία ρέ ει να έχει µια α ό τις εξής τιµές : FlowLayout.CENTER FlowLayout.LEADING FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.TRAILING. Οι τιµές LEADING και TRAILING είναι ίδιες µε τις LEFT και RIGHT και είναι ροε ιλεγµένες. Αυτές διατηρούνται µέσα σε υ οδοχείς και ο ροσανατολισµός τους διαµορφώνεται για γλώσσες ου διαβάζονται α ό 21

δεξιά ρος τα αριστερά και όχι α ό τα αριστερά ρος τα δεξιά. Αντίστοιχα η οριζόντια και η κατακόρυφη α όσταση ανάµεσα σε αυτά τα συστατικά καθορίζεται σε pixels α ό την horizsep και VertSep. Εκτός α ό τον BorderLayout και τον FlowLayout η Java αρέχει και άλλους διαχειριστές διάταξης. GridLayout: Ο διαχειριστής διάταξης GridLayout συσκευάζεται µέσα στο java.awt και δηµιουργεί ένα λέγµα ορθογώνιων κελιών µέσα στα ο οία το οθετούνται µεµονωµένα συστατικά. Ο αριθµός των γραµµών και των κελιών µέσα στο λέγµα καθορίζεται µόλις δηµιουργηθεί η διάταξη. Μέσα στο λέγµα το µέγεθος όλων των κελιών είναι το ίδιο και ένα συστατικό το ο οίο το οθετείται µέσα σε ένα κελί αίρνει τέτοιο µέγεθος ώστε να γεµίζει τις διαστάσεις του κελιού. GridBagLayout: Είναι µια συλλογή λεγµάτων. Σας δίνει την δυνατότητα να καθορίσετε την το οθέτηση συστατικών καθορίζοντας τις θέσεις τους µέσα σε κελιά, µέσα σε κάθε λέγµα. Η ουσία είναι ως κάθε συστατικό µ ορεί να έχει διαφορετικό µέγεθος και κάθε γραµµή µέσα στο λέγµα µ ορεί να έχει διαφορετικό αριθµό στηλών. Έτσι µ ορείτε να ελέγχετε τον τρό ο διάταξης των συστατικών µέσα σε έναν υ οδοχέα. Το GridBagLayout συσκευάζεται µέσα στο java.awt. BoxBagLayout: Σας ε ιτρέ ει να δηµιουργήσετε µια οµάδα συστατικών τα ο οία διατάσσονται είτε κατακόρυφα, είτε οριζόντια σαν µια οµάδα. Το BoxBagLayout δεν χρησιµο οιείται συχνά σαν διαχειριστής διάταξης για τον τοµέα εριεχοµένου. Αντί γι αυτό χρησιµο οιείται σαν διαχειριστής διάταξης για ένα ή ερισσότερα άνελ (ό ως τα στιγµιότυ α JPanel) έτσι τα συστατικά ροστίθενται σε αυτά τα άνελ και κατό ιν τα άνελ ροστίθενται µε την σειρά τους στον τοµέα εριεχοµένου. Σε ερί τωση ου θέλετε να αλλάξετε τον διαχειριστή διάταξης για τον τοµέα εριεχοµένου ου σχετίζεται µ έναν υ οδοχέα JApplet καλέστε α λά την setlayout() ε ί του στιγµιότυ ου JApplet. 22

Εργασία µε την JLabel Η JLabel δηµιουργεί µια ετικέτα Swing. Είναι το ιο α λό συστατικό του Swing ε ειδή δεν α οκρίνεται σε αλληλε ίδραση α ό τον χρήστη. Παρόλο ου η JLabel είναι ολύ εύκολη στη χρήση υ οστηρίζει ολλά χαρακτηριστικά και ε ιτρέ ει ολλή εξειδίκευση κάνοντας δυνατή τη δηµιουργία ιδιαίτερα ερίτεχνων ετικετών. Βήµα ρος Βήµα Για να δηµιουργήσετε και να διαχειριστείτε µια ετικέτα Swing ακολουθήστε τα εξής βήµατα : 1. ηµιουργήστε ένα στιγµιότυ ο JLabel καθορίζοντας το κείµενο και/ή το εικονίδιο ου θα εµφανιστεί µέσα στην ετικέτα. 2. Για να το οθετήσετε ένα ερίγραµµα γύρω α ό µια ετικέτα καλέστε την setborder(). 3. Για να αντιστοιχίσετε τα εριεχόµενα της ετικέτας κατακόρυφα, καλέστε την setveticalalignment(), ενώ για να θέσετε την οριζόντια στοίχιση µετά τη δηµιουργία της ετικέτας καλέστε την sethorizontalaligment(). 4. Για να ενεργο οιήσετε ή να α ενεργο οιήσετε µια ετικέτα καλέστε την setenabled(). 5. Για να αλλάξετε το κείµενο µέσα σε µια ετικέτα καλέστε την settext() και αν θέλετε να άρετε το κείµενο µέσα σε µια ετικέτα, µ ορείτε να καλέσετε την gettext(). 6. Για να χρησιµο οιήσετε HTML µέσα σε µια ετικέτα αρχίστε µε το κείµενο <html>. 23

Συζήτηση Η JLabel ορίζει αρκετούς δηµιουργούς οι ο οίοι είναι αρακάτω : JLabel () JLabel (Icon icon), JLabel (String str), JLabel (Icon icon, int horizalign), JLabel (String str, int horizalign), JLabel (String str, Icon icon, int horzalign). Εδώ, str και icon είναι το κείµενο και το εικονίδιο ου χρησιµο οιούνται στην ετικέτα. Προε ιλεγµένα, το κείµενο και/ή το εικονίδιο µέσα στην ετικέτα στοιχίζονται α ό αριστερά. Ε ίσης, χρησιµο οιώντας την αράµετρο horzalign σας δίνετε η δυνατότητα να αλλάξετε την οριζόντια στοίχιση. Οι τιµές ου µ ορεί να άρει είναι εξής : SwingConstants.LEFT SwingConstants.CENTER SwingConstants.TRAILING SwingConstants.RIGHT SwingConstants.LEADING Η σύζευξη SwingConstants ορίζει ολλές σταθερές οι ο οίες σχετίζονται µε το Swing. Η σύζευξη αυτή υλο οιείται α ό την JLabel, αλλά και α ό άλλα συστατικά. Τα εικονίδια καθορίζονται α ό αντικείµενα τύ ου Icon τα ο οία είναι µια σύζευξη ου ορίζεται α ό το Swing. ο ιο εύκολος τρό ος ροκειµένου να άρετε ένα εικονίδιο είναι µε την κλάση ImageIcon. Η 24

ImageIcon υλο οιεί την Icon και ενθυλακώνει µια εικόνα. Έτσι ένα αντικείµενο τύ ου ImageIcon µ ορεί να µεταβιβαστεί σαν όρισµα στην αράµετρο Icon του δηµιουργού JLabel. ImageIcon (String filename): ο ImageIcon αίρνει την εικόνα ου είναι µέσα στο αρχείο µε όνοµα filename. Μ ορείτε να το οθετήσετε ένα ερίγραµµα γύρω α ό µια ετικέτα, τα εριγράµµατα είναι χρήσιµα όταν θέλετε να εµφανίσετε τα όρια της ετικέτας. Πρέ ει να γνωρίζετε ως όλα τα εριγράµµατα του Swing είναι στιγµιότυ α της σύζευξης javax.swing.border.border. Βέβαια το Swing αρέχει αρκετά ροκαθορισµένα στυλ εριγραµµάτων τα ο οία διατίθενται µέσω της javax.swing.border.factory. Η κλάση αυτή ορίζει αρκετούς τύ ους εριγραµµάτων, α ό α λές γραµµές εριγραµµάτων µέχρι εριγράµµατα µε λοξοτοµή, ανάγλυφα, µε τίτλο, ή και µε λεζάντα. Για να δηµιουργήσετε ένα ερίγραµµα γραµµής: static Border createlineborder (Color linecolor) : linecolor, καθορίζει το χρώµα της γραµµής, το ο οίο χρησιµο οιείται σαν ερίγραµµα. Αν θέλετε να σχεδιάσετε ένα µαύρο ερίγραµµα µεταβιβάστε την αράµετρο Color.BLACK η ο οία δηµιουργεί ένα ερίγραµµα γραµµής µε το ροε ιλεγµένο άχος. void setborder (Border border): border, καθορίζει το ερίγραµµα ου θα χρησιµο οιηθεί. εν είναι α αραίτητο να δηµιουργήσετε ένα νέο αντικείµενο Border για κάθε ετικέτα στη ο οία θα καθορίσετε το ερίγραµµα. sethorizontalalignment (int horzalign): horzalign, ρέ ει να είναι µια α ό τις σταθερές οριζόντιας στοίχισης. 25

Για να ορίσετε την κατακόρυφη στοίχιση µιας ετικέτας καλέστε την : void setverticalalignment (int vertalign): η τιµή ου µεταβιβάζεται στην vertalign ρέ ει να είναι: SwingConstants.TOP SwingConstants.CENTER SwingConstants.BOTTOM Το κείµενο ροε ιλεγµένα κεντράρεται α ό άνω ρος τα κάτω ο ότε θα χρησιµο οιήσετε την CENTER µόνο αν ε αναφέρετε την κατακόρυφη στοίχιση στην ροε ιλογή της. Γενικότερα, η στοίχιση της ετικέτας ε ηρεάζει µόνο εκείνες τις ετικέτες οι ο οίες αίρνουν µεγαλύτερο µέγεθος α ό τα εριεχόµενά τους. Ο διαχειριστής διάταξης GridLayout ρυθµίζει το µέγεθος µιας ετικέτας αυτόµατα και έτσι γεµίζει τον διαθέσιµο χώρο. void setenabled(boolean state): όταν η state είναι false η ετικέτα α ενεργο οιείται, εάν θέλετε να την ενεργο οιήσετε µεταβιβάστε την σε true. void settext(string newmsg), String gettext(): το string ου µεταβιβάζεται στην newmsg εµφανίζεται µέσα στην ετικέτα αντικαθιστώντας το ροηγούµενο string. Για να άρετε ή να αλλάξετε τα εριεχόµενα µιας ετικέτας κατά τον χρόνο εκτέλεσης, για να θέσετε το κείµενο καλέστε την settext(), ενώ για να άρετε κείµενο καλέστε την gettext(). Ε ίσης µ ορείτε να χρησιµο οιήσετε ένα string ου εριέχει HTML σαν το κείµενο εκείνο ου θα εµφανιστεί α ό µια ετικέτα. Για να γίνει αυτό αρχίστε το string µε <html>, έτσι το κείµενο µορφο οιείται αυτόµατα και η HTML σας δίνει την δυνατότητα να εµφανίσετε κείµενο σε δύο ή σε ερισσότερες γραµµές. 26

Ε ιλογές και Εναλλακτικές Λύσεις Εκτός α ό τον καθορισµό ή α ό την λήψη του κειµένου µέσα σε µια ετικέτα, µ ορείτε να άρετε ή να θέσετε το εικονίδιο χρησιµο οιώντας τις µεθόδους : Icon geticon(), void seticon(icon icon).η icon καθορίζει το εικονίδιο το ο οίο θα εµφανιστεί µέσα στην ετικέτα. Ε ειδή το εικονίδιο µ ορεί να καθοριστεί κατά την δηµιουργία της ετικέτας, θα χρειαστεί να χρησιµο οιήσουµε µόνο την seticon() αν θέλουµε να αλλάξουµε το εικονίδιο εφόσον δηµιουργηθεί η ετικέτα. Όταν µια ετικέτα α ενεργο οιείτε, αυτοµάτως τα εριεχόµενά της εµφανίζονται αµυδρά. Μ ορείτε να καθορίσετε µια ξεχωριστή εικόνα η ο οία θα χρησιµο οιείται όταν α ενεργο οιείται η ετικέτα καλώντας την setdisabledicon() ως εξής : void setdisabledicon(icon icon), icon είναι η εικόνα ου εµφανίζεται όταν α ενεργο οιείται η ετικέτα. Σε ερί τωση ου µια ετικέτα εριέχει ένα εικονίδιο και κείµενο, ροε ιλεγµένα το εικονίδιο εµφανίζεται στα αριστερά. Καλώντας µια α ό τις αρακάτω µεθόδους ή ακόµα και τις δυο αυτό µ ορεί να αλλάξει: void setverticaltextposition(int loc), void set HorizontalTextPosition(int loc). Για την setverticaltextposition() η loc να είναι µια α ό τις σταθερές κατακόρυφης στοίχισης ενώ για την set HorizontalTextPosition() η loc είναι µια α ό τις σταθερές οριζόντιας στοίχισης. Ορισµένες φορές, µια ετικέτα εριγράφει τον σκο ό ή τη σηµασία ενός άλλου συστατικού, ό ως ενός εδίου κειµένου. Σ ένα εδίο κειµένου το ο οίο δέχεται ένα όνοµα, µ ορεί να ροηγείται µια ετικέτα η ο οία να εµφανίζει την εριγραφή Name (όνοµα). Ακόµη είναι συνηθισµένο η ετικέτα να εµφανίζει µια συντόµευση ληκτρολογίου ου ως α οτέλεσµα έχει να µεταφέρει την εστίαση στο άλλο συστατικό. Με αυτό τον τρό ο, το εδίο Name µ ορεί να έχει συντόµευση το Ν. Μόλις καθοριστεί µια συντόµευση, το άτηµα του συγκεκριµένου λήκτρου µαζί µε το Alt, µεταφέρει την εστίαση της εισόδου στο εδίο κειµένου. Για να ροσθέσετε µια συντόµευση σε µια 27

ετικέτα ρέ ει: α) να καθορίσετε τον χαρακτήρα της συντόµευσης, καλώντας την setdisplayedmnemonic() και β)να συνδέσετε το συστατικό το ο οίο θα δεχτεί την εστίαση µε την ετικέτα καλώντας την setlabelfor(). Και οι δύο µέθοδοι ορίζονται µε την JLabel. Μια α ό τις δύο εκδόσεις της setdisplayedmnemonic() είναι: void setdisplayedmnemonic(char ch), εδώ ch καθορίζει τον χαρακτήρα ου θα εµφανιστεί σαν συντόµευση ληκτρολογίου. Αυτό σηµαίνει ως ο χαρακτήρας θα είναι υ ογραµµισµένος και σε ερί τωση ου υ άρχουν ερισσότεροι α ό ένας ροκαθορισµένοι χαρακτήρες µέσα στο κείµενο της ετικέτας τότε υ ογραµµίζεται η ρώτη εµφάνιση. Τέλος, ο χαρακτήρας ου µεταβιβάζεται µέσω της ch µ ορεί να είναι είτε εζός, είτε κεφαλαίος. Α ό την στιγµή ου ορίσετε την συντόµευση, ρέ ει να συνδέσετε την ετικέτα µε το συστατικό το ο οίο θα δεχτεί την εστίαση όταν θα ατιέται το λήκτρο της συντόµευσης. Αυτό ραγµατο οιείται µε την µέθοδο setlabelfor() : void setlabelfor(component comp), εδώ comp είναι µια αναφορά στο συστατικό ου θα δεχτεί την εστίαση όταν ατιέται το λήκτρο συντόµευσης µαζί µε το λήκτρο ALT. 28

ηµιουργία ενός Α λού Κουµ ιού Ο ιο συνηθισµένος µηχανισµός της GUI ου χρησιµο οιείται, είναι το κουµ ί. Ένα κουµ ί είναι ένα στιγµιότυ ο JButton ου χρησιµο οιεί την αφαιρετική κλάση AbstractButton η ο οία ορίζει την λειτουργικότητα ου είναι κοινή σε όλα τα κουµ ιά. Το µοντέλο ου χρησιµο οιείται α ό το JButton είναι το ButtonModel. Τα κουµ ιά του Swing αρέχουν µια µεγάλη λειτουργικότητα. Ένα JButton µ ορεί να εριέχει κείµενο, εικόνα ή ακόµα και τα δύο. Το κουµ ί έχει την δυνατότητα να ενεργο οιείται ή να α ενεργο οιείται υ ό τον έλεγχο του ρογράµµατος. Το κείµενο µ ορεί να αλλάζει δυναµικά, ανάλογα µε την κατάσταση του κουµ ιού. Το κουµ ί µ ορεί να εµφανίζει ένα εικονίδιο όταν αυτό ερνάει το οντίκι α ό άνω του και ένα άλλο εικονίδιο, όταν ατιέται ή όταν α ενεργο οιείται. Βήµα ρος Βήµα Για να δηµιουργήσετε και να διαχειριστείτε ένα κουµ ί κάντε τα εξής: 1. ηµιουργήστε ένα στιγµιότυ ο JButton. 2. Ορίστε ένα ActionListener για το κουµ ί. Αυτός ο ακροατής θα χειρίζεται τα συµβάντα ατήµατος του οντικιού µέσα στη µέθοδο του actionperformed(). 3. Προσθέστε ένα στιγµιότυ ο ActionListener στο κουµ ί καλώντας την addactionlistener(). 4. Για να βρείτε ιο κουµ ί αρήγαγε ένα ActionEvent ρέ ει να καλέσετε την getactioncommand() η ο οία ε ιστρέφει στο string εντολής ενέργειας ου σχετίζεται µε το κουµ ί. 5. Για να ενεργο οιήσετε ή να α ενεργο οιήσετε ένα κουµ ί καλέστε την setenable(). 29

6. Για να καθορίσετε αν ένα κουµ ί είναι ενεργό ή ανενεργό καλέστε την isenabled(). Συζήτηση Για να δηµιουργήσετε ένα κουµ ί, δηµιουργήστε ένα στιγµιότυ ο του JButton. JButton (String msg), εδώ msg καθορίζει το µήνυµα ου εµφανίζεται µέσα στο κουτί. Όταν ατιέται ένα κουµ ί, αράγει ένα ActionEvent ου συσκευάζεται µέσα στο java.awt.event. Για να κάνετε ακρόαση ενός συµβάντος ρέ ει ρώτα να δηµιουργήσετε µια υλο οίηση της σύζευξης ActionListener η ο οία ε ίσης συσκευάζεται µέσα στην java.awt.event. και κατό ιν να εγγράψετε αυτό τον ακροατή µε το κουµ ί. Στη συνέχεια µεταβιβάζεται στον εγγεγραµµένο ακροατή ένα ActionEvent κάθε φορά ου ατιέται το κουµ ί. Η σύζευξη ActionListener ορίζει µια µόνο µέθοδο την actionperformed(). void actionperformed(actionevent ae), αυτή η µέθοδος καλείται όταν ατιέται ένα κουµ ί. Αν θέλετε να εγγράψετε ένα ακροατή ενέργειας για ένα κουµ ί χρησιµο οιήστε την µέθοδο addactionlistener(), ου αρέχεται α ό το JButton: void addactionlistener(actionlistener al): το αντικείµενο ου µεταβιβάζεται στην al θα δέχεται ειδο οιήσεις συµβάντων, και αυτό το αντικείµενο ρέ ει να είναι ένα στιγµιότυ ο µιας κλάσης ου υλο οιεί τη σύζευξη ActionListener. Χρησιµο οιώντας το αντικείµενο ActionEvent ου µεταβιβάζεται στην actionperformed() µ ορείτε να άρετε αρκετές χρήσιµες ληροφορίες ου σχετίζονται µε το συµβάν ατήµατος κουµ ιού. Ένα string εντολής ενέργειας σχετίζεται µε όλα τα κουµ ιά. Προε ιλεγµένα, αυτό το string είναι 30

εκείνο ου εµφανίζεται µέσα στο κουµ ί. Το string εντολής ενέργειας λαµβάνεται καλώντας την getactioncommand() ε ί του αντικειµένου συµβάντος. Η δήλωση του είναι η εξής: String getactioncommand(), όταν χρησιµο οιείτε δύο ή και ερισσότερα κουµ ιά µέσα στην ίδια εφαρµογή το string εντολής ενέργειας σας αρέχει έναν εύκολο τρό ο αναγνώρισης του οιο κουµ ί αρήγαγε το συµβάν. ηλαδή µ ορείτε να χρησιµο οιήσετε το string εντολής ενέργειας ροκειµένου να καθορίσετε οιο κουµ ί ατήθηκε. Ε ίσης µ ορείτε να ενεργο οιήσετε ή να α ενεργο οιήσετε ένα κουµ ί υ ό τον έλεγχο του ρογράµµατος καλώντας την setenabled(). void setenabled(boolean state), αν η state είναι false τότε το κουµ ί α ενεργο οιείται. Αυτό σηµαίνει ως δεν µ ορείτε να το ατήσετε και εµφανίζεται αµυδρό. Αν όµως η state είναι true τότε το κουµ ί ενεργο οιείται. Προκειµένου να καθορίσετε την κατάσταση ενεργού ή ανενεργού κουµ ιού καλέστε την isenabled() ως εξής: boolean isenabled(), και ε ιστρέφει true αν είναι ενεργό το κουµ ί, ή false αν είναι ανενεργό. Ε ιλογές και Εναλλακτικές Λύσεις Το JButton αρέχει δηµιουργούς οι ο οίοι σας ε ιτρέ ουν να καθορίσετε ένα εικονίδιο ή ένα εικονίδιο µε κείµενο µέσα στο κουµ ί. Ε ίσης µ ορείτε να καθορίσετε ρόσθετα εικονίδια τα ο οία να δηλώνουν ότε ερνά το οντίκι άνω α ό το κουµ ί, ότε το κουµ ί είναι ανενεργό και ότε είναι ατηµένο. Ακόµη, µ ορείτε να χρησιµο οιήσετε HTML µέσα στο κείµενο ου εµφανίζεται µέσα στο κουµ ί. Υ άρχει η δυνατότητα να καθορίσετε το κείµενο µέσα σ ένα κουµ ί, αφού το δηµιουργήσετε καλώντας την settext() ενώ, µ ορείτε να άρετε το κείµενο ου βρίσκεται µέσα σ ένα κουµ ί καλώντας την gettext(). void settext(string msg) String gettext() 31

Σε ερί τωση ου έχει τεθεί ρητά η εντολή ενέργειας για το κουµ ί, τότε ο καθορισµός του κειµένου δεν θα ε ηρέαζε την εντολή ενέργειας. ιαφορετικά, η αλλαγή κειµένου αλλάζει την εντολή ενέργειας. Προε ιλεγµένα το string της εντολής ενέργειας ου σχετίζεται µ ένα κουµ ί είναι το string ου εµφανίζεται µέσα στο κουµ ί. Όµως, είναι εφικτό, αν θέσετε την εντολή ενέργειας σ ένα άλλο string καλώντας την setactioncommamd(). void setactioncommamd(string newcmd) το string ου µεταβιβάζεται στην newcmd γίνεται η εντολή ενέργειας για το κουµ ί. Το κείµενο µέσα στο κουµ ί δεν ε ηρεάζεται. 32

Χρήση Εικονιδίων, HTML Και Μνηµονικών µε την JButton Το JButton υ οστηρίζει ολλές ε ιλογές και εξειδικεύσεις, τέσσερις α ό αυτές είναι: 1. Προσθήκη εικονιδίων σ ένα κουµ ί, 2. Χρήση HTML σ ένα κουµ ί, 3. Ορισµός ενός ροε ιλεγµένου κουµ ιού, 4. Προσθήκη ενός µνηµονικού σ ένα κουµ ί. Τα αρα άνω χαρακτηριστικά σας δίνουν την δυνατότητα να δώσετε στην εφαρµογή σας µια διακεκριµένη εµφάνιση καθώς και να βελτιώσετε την δυνατότητα χρησιµο οίησής της. Συζήτηση Για να δηµιουργήσετε ένα κουµ ί ου να εριέχει ένα εικονίδιο ρέ ει να χρησιµο οιήσετε τον αρακάτω δηµιουργό JButton : JButton(Icon icon), το icon καθορίζει το εικονίδιο ου χρησιµο οιείται για το κουµ ί. Για να δηµιουργήσετε ένα κουµ ί το ο οίο να εριέχει ένα εικονίδιο και κείµενο: JButton(String str, Icon icon): όταν υ άρχει κείµενο και ένα εικονίδιο, το εικονίδιο βρίσκεται στην αρχή και το κείµενο στο τέλος. Όµως, µ ορείτε να αλλάξετε τις σχετικές θέσεις της εικόνας, αλλά και του κειµένου. Το εικονίδιο ου καθορίζεται σε αυτές τις εντολές, είναι το ροε ιλεγµένο εικονίδιο. Αυτό είναι το εικονίδιο ου θα χρησιµο οιηθεί για όλες τις χρήσεις, αν δεν καθοριστούν άλλα εικονίδια. Το ροε ιλεγµένο εικονίδιο ε ίσης µ ορεί να καθοριστεί ή και να αλλαχθεί µετά τη δηµιουργία του, καλώντας την seticon(). 33

void seticon(icon deficon) : το ροε ιλεγµένο εικονίδιο καθορίζεται α ό την deficon. Το JButton σας ε ιτρέ ει ε ίσης να καθορίσετε εικονίδια τα ο οία θα εµφανίζονται όταν το κουµ ί α ενεργο οιείται, ατιέται ή ερνάει α ό άνω του το οντίκι. Προκειµένου να θέσετε αυτά τα εικονίδια, χρησιµο οιήστε τις αρακάτω µεθόδους: void setdisabledicon (Icon disabledicon) void setpressedicon (Icon pressedicon) void setrollovericon (Icon rollovericon) Αφού ορίσετε το ροε ιλεγµένο εικονίδιο αυτό θα εµφανίζεται ό οτε συµβεί ένα α ό τα συµβάντα. Να γνωρίζετε ως, το εικονίδιο ου εµφανίζεται όταν ερνά το οντίκι ε άνω α ό το κουµ ί, ιθανών, να µην υ οστηρίζεται α ό όλα τα εριβάλλοντα εργασίας σας. Μ ορείτε να καθορίσετε αν αυτό το χαρακτηριστικό είναι ενεργο οιηµένο καλώντας την isrolloverenabled(). Αν καθορίσετε αυτό το εικονίδιο, αυτό ενεργο οιείται αυτόµατα, αλλά µ ορείτε να θέσετε ρητά την ιδιότητα rollover-enabled, καλώντας την setrollonerenabled(true). Όταν ο χρήστης ατά ENTER α ό το ληκτρολόγιο µ ορείτε να ορίσετε ένα κουµ ί το ο οίο θα ατιέται αυτόµατα και αυτό λέγεται ροε ιλεγµένο κουµ ί. Για να δηµιουργήσετε ένα ροε ιλεγµένο κουµ ί καλέστε την setdefaultbutton() ε ί του αντικειµένου JRootPane ου εριέχει το κουµ ί. Με την εξής µέθοδο: void setdefaultbutton(jbutton button), button είναι το κουµ ί το ο οίο θα ε ιλεγεί σαν ροε ιλεγµένο. Η µέθοδος ορίζεται α ό την JRootPane και έτσι ρέ ει να καλείται α ό τον ριζικό τοµέα. Μια αναφορά α ό τον ριζικό τοµέα µ ορείτε να άρετε καλώντας την getrootpane() στον υ οδοχέα ανώτατου ε ι έδου. Ε ίσης µ ορείτε να ροσθέσετε ένα µνηµονικό στο κείµενο ου εµφανίζεται µέσα σ ένα κουµ ί καλώντας της setmnemonic(). Όταν ατιέται 34

αυτό το κουµ ί σε συνδυασµό µε το λήκτρο alt, το κουµ ί θα είναι ατηµένο. Η µέθοδος είναι: void setmnemonic(int mnemkey), mnemkey καθορίζει το µνηµονικό το ο οίο ρέ ει να εριέχει µια α ό τις αρακάτω σταθερές ου ορίζονται α ό την java.awt.event.keyevent δηλαδή VK_A, VK_X ή VK_S. Η κλάση KeyEvent ορίζει σταθερές VK_ για όλα τα λήκτρα του ληκτρολογίου. Έτσι, αν υ οθέσετε ότι ένα JButton κάλεσε την jbtn µ ορείτε να ορίσετε το µνηµονικό ληκτρολογίου σε Τ, µε την αρακάτω ρόταση: jtbn.setmnemonic(keyevent.vk_t); Μετά την εκτέλεση αυτής της ρότασης το κουµ ί ρέ ει να ατηθεί όταν ληκτρολογείτε ALT-T. Ε ιλογές και Εναλλακτικές Λύσεις Μ ορείτε να καθορίσετε αν ένα κουµ ί είναι το ροε ιλεγµένο, καλώντας την isdefaultbutton() ως εξής: boolean isdefaultbutton() Ε ίσης, µ ορείτε να δηλώσετε ότι ένα κουµ ί δεν ρέ ει να χρησιµο οιείται ως ροε ιλεγµένο κουµ ί καλώντας την setdefaultcapable(): void setdefaultcapable(boolean on) Αν η on είναι true τότε το κουµ ί µ ορεί να χρησιµο οιηθεί ως ροε ιλεγµένο, αν είναι false τότε δεν ρέ ει να χρησιµο οιείται ως ροε ιλεγµένο. Για να γίνει αυτό θα ρέ ει να καλέσετε την isdefaultcapable() ό ως αρακάτω: boolean isdefaultcapable( ) Αν το κουµ ί χρησιµο οιείται ως ροε ιλεγµένο τότε ε ιστρέφει true διαφορετικά ε ιστρέφει false. Εξ ορισµού, τα κουµ ιά έχουν τη δυνατότητα να είναι ροε ιλεγµένα, αλλά αυτή η ιδιότητα µ ορεί να τεθεί σε false αν η εµφάνιση και η αίσθηση του συστήµατός σας δεν υ οστηρίζει ροε ιλεγµένα κουµ ιά. Όταν καθορίζετε ένα ροε ιλεγµένο κουµ ί, ρέ ει να είστε ιδιαίτερα ροσεκτικοί ε ειδή είναι εύκολο να ατηθεί κατά λάθος α ό τον χρήστη. Μια µικρή συµβουλή είναι η εξής: αν το ροε ιλεγµένο κουµ ί ρόκειται ας ούµε να αλλάξει ένα αρχείο, τότε ρέ ει να έχετε ένα έλεγχο 35

ασφαλείας ου να α οτρέ ει τον χρήστη να αντικαταστήσει κατά λάθος ένα υ άρχον αρχείο. 36

ηµιουργία ενός Κουµ ιού Εναλλαγής Το JToggleButton µοιάζει µε ένα α λό κουµ ί, αλλά λειτουργεί διαφορετικά διότι έχει δύο καταστάσεις: ατηµένο και α ελευθερωµένο. Όταν ατάτε ένα κουµ ί εναλλαγής, αραµένει ατηµένο, αντί να έρθει στην αρχική του κατάσταση, ό ως κάνει το α λό κουµ ί. Όταν το κουµ ί εναλλαγής το ατήσετε για δεύτερη φορά, αυτό α ελευθερώνεται. Έτσι κάθε φορά ου ατιέται ένα κουµ ί εναλλαγής, εναλλάσσεται ανάµεσα σε δύο καταστάσεις. Βήµα ρος Βήµα Για να χρησιµο οιήσετε ένα κουµ ί εναλλαγής κάντε τα αρακάτω βήµατα: 1. ηµιουργήστε ένα στιγµιότυ ο JToggleButton. 2. Εγγράψτε ένα ItemListener για το κουµ ί και χειριστείτε συµβάντα στοιχείων ου αράγονται α ό το κουµ ί. 3. Για να καθορίσετε αν το κουµ ί είναι ενεργό ή όχι καλέστε την isselected() ε ί του στιγµιότυ ου JButton. Αν το κουµ ί είναι ατηµένο αυτή η µέθοδος θα ε ιστρέψει true. ιαφορετικά καλέστε την getstatechange() ε ί του στιγµιότυ ου ItemEvent η ο οία ε ιστρέφει την τρέχουσα κατάσταση του κουµ ιού. 4. Μ ορείτε να ε ιλέξετε (δηλαδή να ατήσετε) ένα κουµ ί εναλλαγής υ ό τον έλεγχο του ρογράµµατος, καλώντας την setselected(). 37

Συζήτηση Τα κουµ ιά εναλλαγής είναι αντικείµενα της κλάσης JToggleButton. H JToggleButton ε εκτείνει την AbstractButton. Η JToggleButton ορίζει αρκετούς δηµιουργούς, οι ο οίοι σας ε ιτρέ ουν να καθορίσετε το κείµενο και/ή την εικόνα ου εµφανίζεται µέσα στο κουµ ί. Ε ίσης µ ορείτε να θέσετε την αρχική του κατάσταση: JToggleButton(String str, boolean state), ο αρα άνω δηµιουργός, δηµιουργεί ένα κουµ ί εναλλαγής ου εριέχει το κείµενο ου µεταβιβάζεται στην str. Αν η state είναι true τότε το κουµ ί είναι αρχικά ατηµένο (ε ιλεγµένο), διαφορετικά, είναι α ελευθερωµένο(µη ε ιλεγµένο). Η JToggleButton αράγει ένα συµβάν ενέργειας κάθε φορά ου ατιέται. Ακόµη, αράγει ένα συµβάν στοιχείου ου είναι ένα αντικείµενο τύ ου ItemEvent. Ένα συµβάν στοιχείου, χρησιµο οιείται α ό εκείνα τα συστατικά τα ο οία υ οστηρίζουν την έννοια της ε ιλογής. Όταν ατιέται ένα JToggleButton αυτό ε ιλέγεται, όταν α ελευθερώνεται σηµαίνει ως δεν είναι ε ιλεγµένο. Αν και έχετε την δυνατότητα να διαχειριστείτε ένα κουµ ί εναλλαγής χειριζόµενοι τα συµβάντα ενεργειών τους, ένα κουµ ί εναλλαγής τυ ικά τυχαίνει διαχείρισης, χειριζόµενο τα συµβάντα των στοιχείων τους. Ο χειρισµός των συµβάντων στοιχείων ραγµατο οιείται µε υλο οίηση της σύζευξης ItemListener. Αυτή η σύζευξη καθορίζει µόνο µία µέθοδο, την itemstatechanged: void itemstatechanged(itemevent ie), το συµβάν στοιχείου λαµβάνεται µέσα στην ie. Για να άρετε µια αναφορά στο στοιχείο ου άλλαξε, καλέστε την getitem() ε ί του αντικειµένου ItemEvent. Η µέθοδος φαίνεται αρακάτω: Object getitem( ), η αναφορά ου ε ιστρέφεται ρέ ει να γίνει cast στην κλάση συστατικού ου χειρίζεστε η ο οία είναι η JToggleButton. Η µέθοδος getitem είναι ολύ χρήσιµη σε ερι τώσεις ου αρα άνω α ό δύο ή και ερισσότερα συστατικά µοιράζονται τον ίδιο χειριστή ItemEvent και αρέχει 38