Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιασύνδεση µε χρήστη: Swing ΙΙ. Window Listeners

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

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

java.awt Font Γραµµατοσειρές Color Χρώµατα

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Applets. Εισαγωγικά

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Week 10: Graphical User Interfaces

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων

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

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα

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

Week 12: GUIs with Swing

9.1 JFC Swing. 9.1 JFC Swing Java (GUI) Java. Java Foundation Classes (JFC) Swing GUI. JFC Card Pile GameFrame GUI

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

8.1 Top-Level Swing Containers και Swing Components

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

6.1 Εισαγωγή. 6.2 Ασφάλεια

0 SOLID_LINE 1 DOTTED_LINE 2 CENTER_LINE 3 DASHED_LINE 4 USERBIT_LINE

Γενικό Λύκειο Κρουσώνα - Σχολικό έτος Εκπαιδευτικός: Παπαδάκης Σταµάτης

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

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

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

ΜΑΘΗΜΑ 10 Ο ΟΡΓΑΝΩΣΗ ΤΗΣ Β ΓΙΑ ΧΡΗΣΤΕΣ (NON-EXPERTS) Α. ΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ ΕΠΙΛΟΓΩΝ 1. TOOLS DATA UTILITIES SWITCHBOARD MANAGER YES

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

HelloApplet. Παύλος Εφραιμίδης Java Applets 1

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

ΜΑΘΗΜΑ 5 ΣΤΟΧΟΙ: Τρόπος 1:

7 ο Εργαστήριο Θόρυβος 2Δ, Μετακίνηση, Περιστροφή

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

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

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

Cascading Style Sheets (CSS)

Δημιουργώντας μια εφαρμογή ζωγραφικής. 2 η Εργασία

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Αντικειμενοστρεφής Προγραμματισμός

ΠΠΜ 500: Προχωρημένη Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής. 2D Graphics API. Πέτρος Κωμοδρόμος

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιεπαφές και Εσωτερικές κλάσεις Interfaces and Inner Classes. ιεπαφές - Interfaces

Computing and Information Systems Service. Windows XP

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων

ηµιουργία ιαλογικών Προγραµµάτων για το Web

Σχεδίαση με το AutoCAD

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Κεφάλαιο 3 Βασική Σχεδίαση και Επεξεργασία

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Κλάσεις και Αντικείµενα

Εισαγωγή στην OpenGL

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

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Περιεχόμενα. Γαβαλάς Δαμιανός

2.0 ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ-ΟΡΟΛΟΓΙΕΣ

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Λειτουργία προγράµµατος

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Τα Windows Πολύ Απλά και Πολύ Σύντομα


Εργαστήριο #12. Βήμα 1 ο. Βήμα 2 ο. Βήμα 3 ο. Βήμα 4 ο.

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

Θα αναπτύξουμε μια εφαρμογή που θα λειτουργεί σαν κουμπί πανικού. Η εφαρμογή θα αποτελείται από δύο κουμπιά.

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

ΤΕΙ Ιονίων Νήσων Εργαστηριακές Ασκήσεις στα Γεωγραφικά Συστήματα Πληροφοριών

2. Με το εικονίδιο συντόμευσης στην επιφάνεια εργασίας των Windows.

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

Graphics.h Διασύνδεση με τη Βιβλιοθήκη Γραφικών

Atlantis - Νέο user interface

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Φύλλο Εργασίας Τίτλος: Εισαγωγική Εφαρμογή

CSS Εργαστήριο 5. Θέση και διάταξη

Create Sprite at Runtime

Στις επόµενες διαφάνειες θα δούµε τις ιδιότητες του CSS που µπορούµε να επηρεάσουµε µέσω του Dreamweaver.

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Η Βίβλος των CSS - Μέρος 3 Το Box Model, τα Περιθώρια και τα Περιγράμματα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

Ενότητα 15 Μορφοποίηση της Γραφικής Παράστασης

Αντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1

Στοιχεία ορισμού θέσης (Positioning Elements)

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

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Από τη UML στον Κώδικα. Μέρος Α

Δημιουργώντας γραφικά στο περιβάλλον 3Ds Max χρησιμοποιώντας βασικά εργαλεία

3D FLASH ANIMATOR (3DFA)

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

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Προγραµµατισµός ΙΙ Java 2

Οπτικός Προγραμματισμός σε NetBeans με Java Swing

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

1.1.1 Το περιβάλλον εργασίας. Περιοχές της οθόνης και λειτουργία τους

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Λεπτομέριες τοιχοποιίας Σχεδίαση κάτοψης

Μπορούμε να χρησιμοποιήσουμε τις παρακάτω μορφές συντεταγμένων με οποιοδήποτε συνδυασμό θέλουμε. Καρτεσιανές συντεταγμένες

Transcript:

Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 11η: 28/08/2006 1 ιασύνδεση µε χρήστη: Swing ΙΙ Creating User Interfaces: Swing ΙΙ 2 Window Listeners Κάνοντας click στο κουµπί close-window σε ένα JFrame ενεργοποιείται ένα γεγονός παραθύρου (window event) Τα window events είναι αντικείµενα της κλάσης WindowEvent Η µέθοδος setwindowlistener µπορεί να συσχετίσει (register) ένα window listener για κάποιο window event Ένας window listener µπορεί να προγραµµατιστεί ώστε ν αποκρίνεται σε αυτόν τον τύπο γεγονότος Ένας window listener είναι µια οποιαδήποτε κλάση που ικανοποιεί/υλοποιεί τη διεπαφή (interface) WindowListener 3 1

Window Listeners Μια κλάση που υλοποιεί το interface WindowListener πρέπει να έχει ορισµούς για όλες τις επτά µεθόδους του interface αυτού Εάν µια µέθοδος δεν είναι απαραίτητη, τότε πρέπει να οριστεί µε κενόσώµα public void windowdeiconified(windowevent e) { } 4 Μέθοδοι του interface WindowListener (1/2) 5 Μέθοδοι του interface WindowListener (2/2) 6 2

A Window Listener Inner Class Μια εσωτερική κλάση (inner class) συχνά λειτουργεί ως window listener για ένα JFrame Το επόµενο παράδειγµα χρησιµοποιεί µια window listener inner class µε όνοµα CheckOnExit addwindowlistener(new CheckOnExit()); Όταν γίνει click στο κουµπί close-window toy κυρίου παραθύρου, ενεργοποιείται ένα window event Αυτό λαµβάνεται από το anonymous window listener αντικείµενο Αυτό προκαλεί την ενεργοποίηση της µεθόδου windowclosing 7 A Window Listener Inner Class Η µέθοδος windowclosing δηµιουργεί και απεικονίζει ένα αντικείµενο της κλάσης ConfirmWindow Περιέχει το µήνυµα "Are you sure you want to exit?" όπως επίσης και τα κουµπιά "Yes" και "No" Εάν ο χρήστης κάνει click στο "Yes," το action event που ενεργοποιείται λαµβάνεται από τη µέθοδο actionperformed Τερµατίζει το πρόγραµµα µε µια κλήση στη µέθοδο System.exit Εάν ο χρήστης κάνει click στο "No," η µέθοδος actionperformed ενεργοποιεί τη µέθοδο dispose Αυτό προκαλεί την αποµάκρυνση του καλούντος αντικειµένου (δηλ., το µικρό παράθυρο της κλάσης ConfirmWindow), αλλά δεν επηρεάζει το κυρίως παράθυρο 8 Ένας window listener (1/8) 9 3

Ένας window listener (2/8) 10 Ένας window listener (3/8) 11 Ένας window listener (4/8) 12 4

Ένας window listener (5/8) 13 Ένας window listener (6/8) 14 Ένας window listener (7/8) 15 5

Ένας window listener (8/8) 16 Η µέθοδος dispose Η µέθοδος dispose της κλάσης JFrame χρησιµοποιείται για να απαλείψουµετοjframe χωρίς να τερµατίσουµε τοπρόγραµµα Οι πόροι του υπολογιστή που καταναλώνονται από αυτό το JFrame και τις συνιστώσες του επιστρέφονται για χρήση ξανά στο σύστηµα Εκτός εάν απαλειφθούν όλα τα στοιχεία (δηλ., σε ένα πρόγραµµα µε ένα παράθυρο), η παραπάνω µέθοδος δεν τερµατίζει το πρόγραµµα Η dispose χρησιµοποιείται συχνά σε ένα πρόγραµµα µε πολλαπλά παράθυρα για να εξαλείψουµε κάποιο παράθυρο χωρίς να τερµατίζουµε τοπρόγραµµα 17 Παγίδα: Παραλείποντας την ενεργοποίηση της setdefaultcloseoperation Ησυµπεριφορά που καθορίζεται από την setdefaultcloseoperation λαµβάνει χώρα ακόµα και εάν υπάρχει κάποιος window listener συσχετισµένος (registered) µε το JFrame Οποτεδήποτε κάποιος window listener συσχετίζεται (registered) ώστε ν αποκρίνεται σε window events, πρέπει να περιλαµβάνεται µια ενεργοποίηση της setdefaultcloseoperation Αυτήηενεργοποίησηγίνεταισυνήθωςµέσα στον JFrame constructor 18 6

Παγίδα: Παραλείποντας την ενεργοποίηση της setdefaultcloseoperation Εάν ο window listener λαµβάνει µέριµνα όλης της συµπεριφοράς του παραθύρου, τότε ο JFrame constructor πρέπει να περιέχει το ακόλουθο: setdefaultcloseoperation( JFrame.DO_NOTHING_ON_CLOSE) Εάναυτήηδήλωσηδενσυµπεριλαµβάνεται, ηεπόµενη εξ ορισµού ενέργεια θα λάβει χώρα, ανεξάρτητα από το εάν κάποιος window listener υποτίθεται ότι λαµβάνει µέριµνα γι αυτό: setdefaultcloseoperation(jframe.hide_on_close); Αυτή η δήλωση θα κρύψει το JFrame, αλλά δεν θατερµατίσει το πρόγραµµα 19 ΗκλάσηWindowAdapter Όταν µια κλάση δεν παρέχει πραγµατικές υλοποιήσεις για τις περισσότερες από τις µεθόδους του interface WindowListener, είναι καλύτερα να την κάνουµε παραγόµενη κλάση της κλάσης WindowAdapter Μόνο οι κεφαλίδες µεθόδων, που χρησιµοποιούνται, πρέπει να οριστούν Οι άλλες κεφαλίδες µεθόδων κληρονοµούν τετριµµένες υλοποιήσεις από την WindowAdapter, και έτσι δεν υπάρχει ανάγκη για κενά σώµατα µεθόδων Αυτό µπορεί να γίνει µόνο όταν η JFrame δεν χρειάζεται να παραχθεί (derived) από κάποια άλλη κλάση 20 Χρήση της WindowAdapter 21 7

Εικονίδια - Icons Τα JLabels, JButtons, και JMenuItems µπορεί να έχουν icons Ένα icon είναι απλά µια µικρή εικόνα εν απαιτείται να είναι µικρή Ένα icon είναι ένα αντικείµενο της κλάσης ImageIcon Βασίζεται σε ένα ψηφιακό αρχείο εικόνας όπως.gif,.jpg, ή.tiff Οι labels, buttons, και menu items µπορεί να εικονίζουν ένα string, ένα icon, ένα string µαζί µεέναicon, ή τίποτε από όλα αυτά 22 Εικονίδια - Icons ΗκλάσηImageIcon χρησιµοποιείται για να µετατρέψουµε µια εικόνα σε ένα Swing icon ImageIcon dukeicon = new ImageIcon("duke_waving.gif"); Το αρχείο εικόνας πρέπει να βρίσκεται στο ίδιο directory όπως και η κλάση στην οποία εµφανίζεται ο κώδικας, εκτός και εάν δίνουµε ένα πλήρες ή σχετικό µονοπατιού Σηµειώστε ότι το όνοµα του αρχείου εικόνας δίνεται ως string 23 Εικονίδια - Icons Ένα icon µπορεί να προστεθεί σε µια label µεχρήσητης µεθόδου seticon ως ακολούθως: JLabel dukelabel = new JLabel("Mood check"); dukelabel.seticon(dukeicon); Αντί γι αυτό, ένα icon µπορεί να δοθεί ως όρισµαστον constructor µιας JLabel: JLabel dukelabel = new JLabel(dukeIcon); Μπορεί να προστεθεί και κείµενο σε µια label µεχρήστη της µεθόδου settext: dukelabel.settext("mood check"); 24 8

Εικονίδια - Icons Τα icons και το κείµενο µπορεί να προστεθούν σε JButtons και JMenuItems µε τονίδιο τρόποόπως προστίθενται σε ένα JLabel JButton happybutton = new JButton("Happy"); ImageIcon happyicon = new ImageIcon("smiley.gif"); happybutton.seticon(happyicon); 25 Εικονίδια - Icons Τα button ή menu items µπορεί να δηµιουργηθούν µε µόνο ένα icon δίνοντας το αντικείµενο ImageIcon ως όρισµαστονconstructor JButton ή JMenuItem ImageIcon happyicon= new ImageIcon("smiley.gif"); JButton smilebutton= new JButton(happyIcon); JMenuItem happychoice= new JMenuItem(happyIcon); Ένα button ή menu item που δηµιουργείται χωρίς text θα πρέπει να χρησιµοποιεί τη µέθοδο setactioncommand για να θέτει ρητά την εντολή ενέργειας, αφού δεν υπάρχει string 26 Χρήση των icons (1/5) 27 9

Χρήση των icons (2/5) 28 Χρήση των icons (3/5) 29 Χρήση των icons (4/5) 30 10

Χρήση των icons (5/5) 31 Μερικές µέθοδοι των κλάσεων JButton, JMenuItem, και JLabel (1/4) 32 Μερικές µέθοδοι των κλάσεων JButton, JMenuItem, και JLabel (2/4) 33 11

Μερικές µέθοδοι των κλάσεων JButton, JMenuItem, και JLabel (3/4) 34 Μερικές µέθοδοι των κλάσεων JButton, JMenuItem, και JLabel (4/4) 35 ΗκλάσηInsets Τα αντικείµενα της κλάσης Insets χρησιµοποιούνται για να καθορίζουν το µέγεθος του περιθωρίου σε ένα button ή menu item Τα ορίσµατα που δίνονται όταν δηµιουργείται ένα αντικείµενο της κλάσης Insets είναι σε pixels ΗκλάσηInsets βρίσκεται στο package java.awt public Insets(int top, int left, int bottom, int right) 36 12

Μπάρες Ολίσθησης - Scroll Bars Όταν δηµιουργείται µια text area, οαριθµός των γραµµών που είναι ορατές και ο αριθµός των χαρακτήρων ανά γραµµή καθορίζεται ως εξής: JTextArea memodisplay = new JTextArea(15, 30); Όµως, είναι συχνά καλύτερο να µην χρειάζεται να θέτουµεένασταθερόόριοστοναριθµό των γραµµών ή των χαρακτήρων ανά γραµµή Αυτό µπορεί να γίνει µεχρήσητωνscroll bars στην text area 37 Μπάρες Ολίσθησης - Scroll Bars Όταν χρησιµοποιούµε scroll bars, το κείµενο εικονίζεται διαµέσου ενός view port που δείχνει µόνο ένα τµήµατουκειµένου κάθε φορά Ένα διαφορετικό τµήµα του κειµένου µπορεί να απεικονιστεί µεχρήσητωνscroll bars που τοποθετούνται κατά µήκος της πλευράς και της κάτω πλευράς της view port Οι scroll bars µπορεί να προστεθούν σε text areas µε χρήση της κλάσης JScrollPane ΗκλάσηJScrollPane βρίσκεται στο package javax.swing Ένα αντικείµενο της κλάσης JScrollPane είναι όπως ένα view port µε scroll bars 38 View Port για µια Text Area 39 13

Μπάρες Ολίσθησης - Scroll Bars Όταν δηµιουργείται ένα JScrollPane, η text area που θα απεικονιστεί δίνεται ως όρισµα JScrollPane scrolledtext = new JScrollPane(memoDisplay); Το JScrollPane µπορεί να προστεθεί σε έναν container, όπως το JPanel ή JFrame textpanel.add(scrolledtext); 40 Μπάρες Ολίσθησης - Scroll Bars Οι πολιτικές για τις scroll bar µπορεί να τεθούν ως εξής: scrolledtext.sethorizontalscrollbarpolicy( JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrolledtext.setverticalscrollbarpolicy( JscrollPane.VERTICAL_SCROLLBAR_ALWAYS); Εάν παραληφθούν οι ενεργοποιήσεις αυτών των µεθόδων, τότε οι scroll bars θα είναι ορατές µόνο εάν χρήσιµες Εάν όλο τοκείµενο χωράει στο view port, τότε οι scroll bars δενθα είναι ορατές Εάν προστεθείαρκετόκείµενο, οι scroll bars θα εµφανιστούν αυτόµατα 41 Μερικές µέθοδοι της κλάσης JScrollPane (1/2) 42 14

Μερικές µέθοδοι της κλάσης JScrollPane (2/2) 43 Μια Text Area µε Scroll Bars (1/8) 44 Μια Text Area µε Scroll Bars (2/8) 45 15

Μια Text Area µε Scroll Bars (3/8) 46 Μια Text Area µε Scroll Bars (4/8) 47 Μια Text Area µε Scroll Bars (5/8) 48 16

Μια Text Area µε Scroll Bars (6/8) 49 Μια Text Area µε Scroll Bars (7/8) 50 Μια Text Area µε Scroll Bars (8/8) 51 17

Συνιστώσες µε µεταβαλλόµενη ορατότητα Ένα GUI µπορείναέχεισυνιστώσεςπουαλλάζουν από ορατές σε µη ορατές και το ανάποδο Στο επόµενο παράδειγµα, η label µε τονduke χωρίς να χαιρετά δείχνεται πρώτα Όταν κάνουµε click στο κουµπί "Wave", η label µετον Duke χωρίς να χαιρετά εξαφανίζεται και εµφανίζεται η label µετονduke να χαιρετά Όταν κάνουµε click στο κουµπί "Stop", η label µετον Duke να χαιρετά εξαφανίζεται, και επιστρέφει η label µε τον Duke να µην χαιρετά Ο Duke είναι η mascot της Sun Microsystems για τη γλώσσα Java Μια συνιστώσα µπορεί να πάψει να είναι ορατή χωρίςναχρειάζεταινακάνουµε αόρατοολόκληροτο GUI 52 Labels µε µεταβαλλόµενη ορατότητα (1/6) 53 Labels µε µεταβαλλόµενη ορατότητα (2/6) 54 18

Labels µε µεταβαλλόµενη ορατότητα (3/6) 55 Labels µε µεταβαλλόµενη ορατότητα (4/6) 56 Labels µε µεταβαλλόµενη ορατότητα (5/6) 57 19

Labels µε µεταβαλλόµενη ορατότητα (6/6) 58 Σύστηµα συντεταγµένωνγιατααντικείµενα γραφικών Όταν σχεδιάζουµε αντικείµενα στην οθόνη, η Java χρησιµοποιεί ένα σύστηµασυντεταγµένων όπου η αρχή, δηλ., το σηµείο (0,0) είναι στην πάνω-αριστερή γωνία της οθόνης Η x-συντεταγµένη (οριζόντια) είναι θετική και αυξάνει προς τα δεξιά Η y-συντεταγµένη (κατακόρυφη) είναι θετική και αυξάνει προς τα κάτω Όλες οι συντεταγµένες είναι κανονικά θετικές Οι µονάδες και τα µεγέθη είναι σε pixels Ηπεριοχήπουχρησιµοποιείται για τη σχεδίαση είναι ένα JFrame ή JPanel 59 Σύστηµα συντεταγµένωνγιατααντικείµενα γραφικών Το σηµείο (x,y) βρίσκεται x pixels από την αριστερή ακµή της οθόνης, και y pixels προς τα κάτω, από την κορυφή της οθόνης Όταν τοποθετούµε ένα ορθογώνιο στην οθόνη, καθορίζουµε τηθέσητηςπάνω-αριστερής γωνίας του Όταν τοποθετούµεένασχήµα, διαφορετικό από ορθογώνιο, στην οθόνη, η Java περικλείει το σχήµα σε ένα φανταστικό ορθογώνιο, που αποκαλείται περικλείον κουτί (bounding box), και τοποθετεί την πάνω-αριστερή γωνία αυτού του ορθογωνίου 60 20

Σύστηµα συντεταγµένων της οθόνης 61 Η µέθοδος paint και η κλάση Graphics Σχεδόν όλες οι Swing καιοισχετικέςµε το Swing συνιστώσες και containers έχουν µια µέθοδο που λέγεται paint Η µέθοδος paint σχεδιάζει τη συνιστώσα ή container στην οθόνη Είναι ήδη ορισµένη, καικαλείταιαυτόµατα όταν το σχήµα απεικονίζεται στην οθόνη Όµως, πρέπει να ξαναοριστεί για να σχεδιάσουµε γεωµετρικά σχήµατα όπως κύκλους και κουτιά Όταν την ξαναορίζουµε, πρέπει πάντα να περικλείουµε την παρακάτω δήλωση: super.paint(g); 62 Η µέθοδος paint και η κλάση Graphics Κάθε container και συνιστώσα που µπορεί να σχεδιαστεί στην οθόνη έχει συσχετισµένο ένα αντικείµενο τύπου Graphics Η κλάση Graphics είναι µια abstract class που βρίσκεται στο package java.awt Αυτό το αντικείµενο έχει δεδοµένα που καθορίζουν ποια περιοχή της οθόνης καλύπτεται απότησυνιστώσαήτονcontainer Το αντικείµενο Graphics για ένα JFrame καθορίζει ότι η σχεδίαση γίνεται µέσα από τα όρια του αντικειµένου JFrame 63 21

Η µέθοδος paint και η κλάση Graphics Το αντικείµενο g της κλάσης Graphics µπορεί να χρησιµοποιηθεί ως το καλούν αντικείµενο για µια µέθοδο σχεδίασης Ησχεδίασηθαλάβειχώραµέσα από την περιοχή της οθόνης που καθορίζεται από το g Η µέθοδος paint έχει µια παράµετρο g τύπου Graphics Όταν ενεργοποιείται η µέθοδος paint, το g αντικαθίσταται από το αντικείµενο Graphics που είναι συσχετισµένο µετοjframe Εποµένως, τα σχήµατα σχεδιάζονται εντός του JFrame 64 Σχεδιάζοντας ένα απλό πρόσωπο (1/5) 65 Σχεδιάζοντας ένα απλό πρόσωπο (2/5) 66 22

Σχεδιάζοντας ένα απλό πρόσωπο (3/5) 67 Σχεδιάζοντας ένα απλό πρόσωπο (4/5) 68 Σχεδιάζοντας ένα απλό πρόσωπο (5/5) 69 23

Μερικές µέθοδοι της κλάσης Graphics (1/4) 70 Μερικές µέθοδοι της κλάσης Graphics (2/4) 71 Μερικές µέθοδοι της κλάσης Graphics (3/4) 72 24

Μερικές µέθοδοι της κλάσης Graphics (4/4) 73 Σχεδιάζοντας Ελλείψεις Μια έλλειψη (oval) σχεδιάζεται µε τηµέθοδο drawoval Τα ορίσµατα καθορίζουν τη θέση, το πλάτος (µεγάλος άξονας) και το ύψος (µικρός άξονας) του µικρότερου ορθογωνίου που περικλείει (το περιγεγραµµένο ορθογώνιο) την έλλειψη g.drawoval(100, 50, 300, 200); Ένας κύκλος είναι µια ειδική περίπτωση της έλλειψης, όπου το πλάτος και το ύψος του ορθογωνίου είναι ίσα g.drawoval(x_face, Y_FACE, FACE_DIAMETER, FACE_DIAMETER); 74 Σχεδιάζοντας ένα ευτυχισµένο πρόσωπο (1/5) 75 25

Σχεδιάζοντας ένα ευτυχισµένο πρόσωπο (2/5) 76 Σχεδιάζοντας ένα ευτυχισµένο πρόσωπο (3/5) 77 Σχεδιάζοντας ένα ευτυχισµένο πρόσωπο (4/5) 78 26

Σχεδιάζοντας ένα ευτυχισµένο πρόσωπο (5/5) 79 Σχεδιάζοντας Τόξα-Arcs Τα τόξα καθορίζονται δίνοντας µια έλλειψη, και κατόπιν καθορίζοντας ποιο τµήµατηςθα χρησιµοποιηθείγιαναπεριγράψειτοτόξο Ηεπόµενη δήλωση σχεδιάζει ένα χαµόγελο σε ένα ευτυχισµένο πρόσωπο: g.drawarc(x_mouth, Y_MOUTH, MOUTH_WIDTH, MOUTH_HEIGHT, MOUTH_START_ANGLE, MOUTH_ARC_SWEEP); Τα ορίσµατα MOUTH_WIDTH και MOUTH_HEIGHT καθορίζουν το µέγεθος του bounding box, ενώ τα ορίσµατα X_MOUTH και Y_MOUTH καθορίζουν τη θέση του Τα τελευταία δυο ορίσµατα καθορίζουν το τµήµα πουθα είναι ορατό 80 Καθορίζοντας ένα Τόξο-Arc (1/2) 81 27

Καθορίζοντας ένα Τόξο-Arc (2/2) 82 Στρογγυλεµένα (Rounded) ορθογώνια Ένα rounded rectangle είναι ένα ορθογώνιο του οποίου οι γωνίες έχουν αντικατασταθεί από τόξα έτσι ώστε οι γωνίες του να είναι στρογγυλεµένες g.drawroundrect(x, y, width, height, arcwidth, archeight) Τα ορίσµατα x, y, width, και height καθορίζουν το κανονικό οργογώνιο Τα τελευταία δυο ορίσµατα arcwidth, και archeight, καθορίζουν τα τόξα που θα χρησιµοποιηθούν για τις γωνίες Κάθε γωνία αντικαθίσταται µε ένα τέταρτο µιας έλλειψης το οποίο έχει arcwidth pixels πλάτος και archeight pixels ύψος Όταν τα arcwidth και archeight είναι ίσα, οι γωνίες θα είναι τόξα κύκλων 83 Ένα στρογγυλεµένο ορθογώνιο 84 28

paintcomponent για Panels Ένα JPanel είναι ένα JComponent, αλλά ένα JFrame είναι ένα Component, και όχι ένα JComponent Εποµένως, χρησιµοποιούν διαφορετικές µεθόδους σχεδίασης στην οθόνη Τα σχήµατα µπορούν να σχεδιαστούν σε ένα JPanel, και το JPanel µπορεί να τοποθετηθεί σε ένα JFrame Όταν ορίζουµε µια κλάση JPanel µε τον τρόπο αυτό, χρησιµοποιείται η µέθοδος paintcomponent αντί της µεθόδου paint Σε κάθε άλλη περίπτωση, οι λεπτοµέρειες είναι ίδιες όπως εκείνες για ένα JFrame 85 Επίδειξη ενός paintcomponent (1/4) 86 Επίδειξη ενός paintcomponent (2/4) 87 29

Επίδειξη ενός paintcomponent (3/4) 88 Επίδειξη ενός paintcomponent (4/4) 89 Action Drawings και repaint Η µέθοδος repaint θα πρέπει να ενεργοποιείται όταν τα γραφικά περιεχόµενα του παραθύρου αλλάζουν Η µέθοδος repaint κάνει κάποια προεργασία, και κατόπιν ενεργοποιεί τη µέθοδο paint, ηοποία ξανασχεδιάζει την οθόνη Παρόλο που η µέθοδος repaint πρέπει να ενεργοποιείται ρητά, είναι ήδη ορισµένη Σε αντίθεση, η µέθοδος paint, πρέπει να ορίζεται, αλλά δεν ενεργοποιείται ρητά 90 30

Ένα Action Drawing (1/7) 91 Ένα Action Drawing (2/7) 92 Ένα Action Drawing (3/7) 93 31

Ένα Action Drawing (4/7) 94 Ένα Action Drawing (5/7) 95 Ένα Action Drawing (6/7) 96 32

Ένα Action Drawing (7/7) 97 Μερικές λεπτοµέρειες για την ενηµέρωση ενός GUI Στο Swing, οι περισσότερες αλλαγές στο GUI ενηµερώνονται αυτόµατα για να γίνουν ορατές στην οθόνη Αυτό γίνεται µετοαντικείµενο repaint manager Παρόλο που ο repaint manager λειτουργεί αυτόµατα, υπάρχουν µερικές ενηµερώσεις που δεν τις εκτελεί Για παράδειγµα, εκείνες που γίνονται µετιςvalidate ή repaint Μια άλλη µέθοδος ενηµέρωσης είναι η pack Η pack αλλάζει το µέγεθος του παραθύρου στο επιθυµητό µέγεθος 98 Η µέθοδος validate Μια ενεργοποίηση της validate προκαλεί σε έναν container να ξανατοποθετήσει τις συνιστώσες του στην οθόνη Είναι ένα είδος µεθόδου "update" που κάνει τις αλλαγές στις συνιστώσες να εµφανιστούνστηνοθόνη Κάθε κλάση container έχει τη δική της µέθοδο validate, η οποία δεν δέχεται ορίσµατα Πολλές απλές αλλαγές σε ένα Swing GUI συµβαίνουν αυτόµατα, ενώ άλλες απαιτούν ενεργοποίηση της validate ή κάποιας άλλης µεθόδου "update" Όταν υπάρχει αµφιβολία δεν προκαλεί βλάβη η ενεργοποίηση της µεθόδου validate 99 33

Καθορίζοντας το χρώµα σχεδίασης Ηχρήσητηςµεθόδου drawline µέσα σε µια µέθοδο paint είναι παρόµοια µετησχεδίασηµε ένα µολύβι το οποίο µπορεί να αλλάζει χρώµατα Η µέθοδος setcolor θα αλλάξει το χρώµα του µολυβιού σχεδίασης Το χρώµα που καθορίζεται µπορεί να αλλαχτεί αργότερα µε µια άλλη ενεργοποίηση της setcolor έτσι ώστε ένα σχέδιο µπορείναέχειπολλαπλά χρώµατα g.setcolor(color.blue) 100 Προσθέτοντας χρώµα 101 Ορίζοντας χρώµατα Τα standard χρώµατα στην κλάση Color είναι ήδη ορισµένα Αυτά παρατίθενται στην επόµενη διαφάνεια ΗκλάσηColor µπορεί να χρησιµοποιηθεί για να οριστούν επιπλέον χρώµατα Χρησιµοποιεί το σύστηµα χρωµάτων RGB, το οποίο χρησιµοποιεί διαφορετικές ποσότητες κόκκινου (red), πράσινου (green), και γαλάζιου (blue) χρώµατος για να παράξει οποιοδήποτε χρώµα 102 34

Οι σταθερές χρώµατος 103 Ορίζοντας χρώµατα Integers ή floats µπορεί να χρησιµοποιηθούν γιανακαθορίσουµετοποσότουred, green, και/ή blue σε ένα χρώµα Οι integers πρέπει να βρίσκονται στην περιοχή 0-255 (inclusive) Color brown = new Color(200, 150, 0); Οι τιµές float πρέπει να βρίσκονται στην περιοχή 0.0-1.0 (inclusive) Color brown = new Color((float)(200.0/255), (float)(150.0/255), (float)0.0); 104 Παγίδα: Χρησιµοποιώντας doubles για να ορίσουµε χρώµα Οι constructors της κλάσης Color δέχονται µόνο ορίσµατα τύπου int ή float Χωρίς προσαρµογή (cast), αριθµοί όπως 200.0/255, 0.5, και 0.0 θεωρούνται τύπου double, και όχι τύπου float εν πρέπει να ξεχνάµενακάνουµε type cast όταν θέλουµεναχρησιµοποιούµε αριθµούς float Σηµειώστε ότι αυτοί οι αριθµοί θα πρέπει να αντικαθίστανται από ορισµένες σταθερές (defined constants) σε οποιοδήποτε τελικό κώδικα public static final float RED_VALUE= (float)0.5; 105 35

Μερικές µέθοδοι της κλάσης Color (1/2) 106 Μερικές µέθοδοι της κλάσης Color (2/2) 107 Το παράθυρο διαλόγου JColorChooser ΗκλάσηJColorChooser µπορεί να χρησιµοποιηθεί για να επιτρέψουµε στο χρήστη να επιλέξει ένα χρώµα Η µέθοδος showdialog της κλάσης JColorChooser παράγει ένα παράθυρο επιλογής χρώµατος Οχρήστηςµπορεί να επιλέξει ένα χρώµα καθορίζοντας τιµές RGB ήεπιλέγονταςαπόδείγµατα χρωµάτων sample Color = JColorChooser.showDialog(this, "JColorChooser", samplecolor); 108 36

Το παράθυρο JColorChooser (1/5) 109 Το παράθυρο JColorChooser (2/5) 110 Το παράθυρο JColorChooser (3/5) 111 37

Το παράθυρο JColorChooser (4/5) 112 Το παράθυρο JColorChooser (5/5) 113 Η µέθοδος drawstring Η µέθοδος drawstring είναι παρόµοια µε τις µεθόδουςσχεδίασηςτηςκλάσηςgraphics Όµως, δείχνει κείµενο και όχι κάποιο σχέδιο Εάν δεν καθοριστεί το font, χρησιµοποιείται ένα default font g.drawstring(thetext, X_START, Y_Start); 114 38

Χρήση της drawstring (1/7) 115 Χρήση της drawstring (2/7) 116 Χρήση της drawstring (3/7) 117 39

Χρήση της drawstring (4/7) 118 Χρήση της drawstring (5/7) 119 Χρήση της drawstring (6/7) 120 40

Χρήση της drawstring (7/7) 121 Fonts Ένα font είναι ένα αντικείµενο της κλάσης Font ΗκλάσηFont βρίσκεται στο package java.awt Ο constructor της κλάσης Font δηµιουργεί ένα font µε συγκεκριµένο στυλ και µέγεθος Font fontobject = new Font("SansSerif", Font.PLAIN, POINT_SIZE); Ένα πρόγραµµα µπορεί να θέσει το font για τη µέθοδο drawstring µέσα στη µέθοδο paint g.setfont(fontobject); 122 Τύποι των Font Κάθε font που είναι διαθέσιµο στοσύστηµα µπορεί να χρησιµοποιηθεί από τη Java Όµως, η Java εγγυάται ότι τουλάχιστον τρία fonts θα είναι διαθέσιµα : "Monospaced", "SansSerif", και "Serif" Τα Serifs είναι µικρές γραµµές που finish off το τέλος των γραµµών στα γράµµατα Αυτό το S έχει serifs, αλλά αυτό το S δεν έχει Ένα "Serif" font έχει πάντα serifs Το Sans σηµαίνει χωρίς, έτσι το "SansSerif" font δεν έχει serifs "Monospaced" σηµαίνει ότι όλοι οι χαρακτήρες έχουν ίδιο πλάτος 123 41

Στυλ των Font Στα Fonts µπορεί να δοθεί συγκεκριµένο στυλ, όπως bold ή italic Πολλαπλά styles µπορούν να καθοριστούν συνδέοντάς τα µετοσύµβολο (δηλ., το δυαδικό σύµβολο του OR) new Font("Serif",Font.BOLD Font.ITALIC, POINT_SIZE); Το µέγεθος ενός font αποκαλείται point size Τα µεγέθη των χαρακτήρων καθορίζονται σε µονάδες γνωστές ως points Ένα point είναι το 1/72 µιας ίντσας (inch) 124 FontDisplay.java (1/2) 125 FontDisplay.java (2/2) 126 42

Εκτέλεση του FontDisplay.java 127 Μερικές µέθοδοι και σταθερές της κλάσης Font (1/2) 128 Μερικές µέθοδοι και σταθερές της κλάσης Font (2/2) 129 43