java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3...

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

Transcript of java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3...

Page 1: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

1

1

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

Η γλώσσα αντικειµενοστραφούςπρογραµµατισµού Java

∆ιδάσκων –∆ηµήτριος Κατσαρός, Ph.D.

@ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύωνΠανεπιστήµιο Θεσσαλίας

∆ιάλεξη 11η: 28/08/2006

2

∆ιασύνδεση µε χρήστη: Swing ΙΙCreating User Interfaces: Swing ΙΙ

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 3

Window Listeners• Κάνοντας click στο κουµπί close-window σε έναJFrame ενεργοποιείται ένα γεγονός παραθύρου(window event)• Τα window events είναι αντικείµενα της κλάσηςWindowEvent

• Η µέθοδος setWindowListener µπορεί νασυσχετίσει (register) ένα window listener γιακάποιο window event• Ένας window listener µπορεί να προγραµµατιστείώστε ν’ αποκρίνεται σε αυτόν τον τύπο γεγονότος

• Ένας window listener είναι µια οποιαδήποτε κλάσηπου ικανοποιεί/υλοποιεί τη διεπαφή (interface)WindowListener

Page 2: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

2

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 4

Window Listeners

• Μια κλάση που υλοποιεί το interface WindowListener πρέπει να έχει ορισµούς γιαόλες τις επτά µεθόδους του interface αυτού

• Εάν µια µέθοδος δεν είναι απαραίτητη, τότεπρέπει να οριστεί µε κενό σώµα

public void windowDeiconified(WindowEvent e){ }

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 5

Μέθοδοι του interface WindowListener(1/2)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 6

Μέθοδοι του interface WindowListener(2/2)

Page 3: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

3

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 7

A Window Listener Inner Class• Μια εσωτερική κλάση (inner class) συχνάλειτουργεί ως window listener για ένα JFrame• Το επόµενο παράδειγµα χρησιµοποιεί µια window

listener inner class µε όνοµα CheckOnExitaddWindowListener(new CheckOnExit());

• Όταν γίνει click στο κουµπί close-window toy κυρίου παραθύρου, ενεργοποιείται ένα window event• Αυτό λαµβάνεται από το anonymous window

listener αντικείµενο• Αυτό προκαλεί την ενεργοποίηση της µεθόδουwindowClosing

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 8

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), αλλά δεν επηρεάζει τοκυρίως παράθυρο

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 9

Ένας window listener (1/8)

Page 4: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

4

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 10

Ένας window listener (2/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 11

Ένας window listener (3/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 12

Ένας window listener (4/8)

Page 5: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

5

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 13

Ένας window listener (5/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 14

Ένας window listener (6/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 15

Ένας window listener (7/8)

Page 6: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

6

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 16

Ένας window listener (8/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 17

Η µέθοδος dispose

• Η µέθοδος dispose της κλάσης JFrameχρησιµοποιείται για να απαλείψουµε το JFrameχωρίς να τερµατίσουµε το πρόγραµµα• Οι πόροι του υπολογιστή που καταναλώνονται απόαυτό το JFrame και τις συνιστώσες τουεπιστρέφονται για χρήση ξανά στο σύστηµα

• Εκτός εάν απαλειφθούν όλα τα στοιχεία (δηλ., σε έναπρόγραµµα µε ένα παράθυρο), η παραπάνω µέθοδοςδεν τερµατίζει το πρόγραµµα

• Η dispose χρησιµοποιείται συχνά σε έναπρόγραµµα µε πολλαπλά παράθυρα για ναεξαλείψουµε κάποιο παράθυρο χωρίς νατερµατίζουµε το πρόγραµµα

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 18

Παγίδα: Παραλείποντας την ενεργοποίηση τηςsetDefaultCloseOperation

• Η συµπεριφορά που καθορίζεται από τηνsetDefaultCloseOperation λαµβάνειχώρα ακόµα και εάν υπάρχει κάποιος window listener συσχετισµένος (registered) µε τοJFrame• Οποτεδήποτε κάποιος window listener συσχετίζεται

(registered) ώστε ν’ αποκρίνεται σε window events, πρέπει να περιλαµβάνεται µια ενεργοποίησητης setDefaultCloseOperation

• Αυτή η ενεργοποίηση γίνεται συνήθως µέσα στονJFrame constructor

Page 7: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

7

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 19

Παγίδα: Παραλείποντας την ενεργοποίηση τηςsetDefaultCloseOperation

• Εάν ο window listener λαµβάνει µέριµνα όλης τηςσυµπεριφοράς του παραθύρου, τότε ο JFrameconstructor πρέπει να περιέχει το ακόλουθο:setDefaultCloseOperation(

JFrame.DO_NOTHING_ON_CLOSE)• Εάν αυτή η δήλωση δεν συµπεριλαµβάνεται, η επόµενηεξ’ ορισµού ενέργεια θα λάβει χώρα, ανεξάρτητα από τοεάν κάποιος window listener υποτίθεται ότι λαµβάνειµέριµνα γι’ αυτό:

setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);• Αυτή η δήλωση θα κρύψει το JFrame , αλλά δεν θα τερµατίσει τοπρόγραµµα

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 20

Η κλάση WindowAdapter

• Όταν µια κλάση δεν παρέχει πραγµατικέςυλοποιήσεις για τις περισσότερες από τις µεθόδουςτου interface WindowListener, είναι καλύτερανα την κάνουµε παραγόµενη κλάση της κλάσηςWindowAdapter• Μόνο οι κεφαλίδες µεθόδων, που χρησιµοποιούνται, πρέπει να οριστούν

• Οι άλλες κεφαλίδες µεθόδων κληρονοµούν τετριµµένεςυλοποιήσεις από την WindowAdapter, και έτσι δενυπάρχει ανάγκη για κενά σώµατα µεθόδων

• Αυτό µπορεί να γίνει µόνο όταν η JFrame δενχρειάζεται να παραχθεί (derived) από κάποια άλληκλάση

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 21

Χρήση της WindowAdapter

Page 8: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

8

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 22

Εικονίδια - Icons• Τα JLabels, JButtons, και JMenuItems

µπορεί να έχουν icons• Ένα icon είναι απλά µια µικρή εικόνα• ∆εν απαιτείται να είναι µικρή

• Ένα icon είναι ένα αντικείµενο της κλάσηςImageIcon• Βασίζεται σε ένα ψηφιακό αρχείο εικόνας όπως .gif, .jpg, ή.tiff

• Οι labels, buttons, και menu items µπορεί ναεικονίζουν ένα string, ένα icon, ένα string µαζίµε ένα icon, ή τίποτε από όλα αυτά

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 23

Εικονίδια - Icons• Η κλάση ImageIcon χρησιµοποιείται για να

µετατρέψουµε µια εικόνα σε ένα Swing iconImageIcon dukeIcon = new ImageIcon("duke_waving.gif");

• Το αρχείο εικόνας πρέπει να βρίσκεται στο ίδιοdirectory όπως και η κλάση στην οποία εµφανίζεται οκώδικας, εκτός και εάν δίνουµε ένα πλήρες ή σχετικόµονοπατιού

• Σηµειώστε ότι το όνοµα του αρχείου εικόνας δίνεταιως string

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 24

Εικονίδια - 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");

Page 9: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

9

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 25

Εικονίδια - Icons

• Τα icons και το κείµενο µπορεί να προστεθούν σεJButtons και JMenuItems µε τον ίδιο τρόπο όπωςπροστίθενται σε ένα JLabelJButton happyButton = new JButton("Happy");ImageIcon happyIcon = new

ImageIcon("smiley.gif");happyButton.setIcon(happyIcon);

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 26

Εικονίδια - Icons

• Τα button ή menu items µπορεί να δηµιουργηθούν µεµόνο ένα icon δίνοντας το αντικείµενο ImageIcon ωςόρισµα στον constructor JButton ή JMenuItemImageIcon happyIcon= new ImageIcon("smiley.gif");JButton smileButton= new JButton(happyIcon);JMenuItem happyChoice= new JMenuItem(happyIcon);

• Ένα button ή menu item που δηµιουργείται χωρίς text θαπρέπει να χρησιµοποιεί τη µέθοδο setActionCommand για ναθέτει ρητά την εντολή ενέργειας, αφού δεν υπάρχει string

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 27

Χρήση των icons (1/5)

Page 10: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

10

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 28

Χρήση των icons (2/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 29

Χρήση των icons (3/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 30

Χρήση των icons (4/5)

Page 11: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

11

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 31

Χρήση των icons (5/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 32

Μερικές µέθοδοι των κλάσεων JButton,JMenuItem, και JLabel (1/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 33

Μερικές µέθοδοι των κλάσεων JButton,JMenuItem, και JLabel (2/4)

Page 12: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

12

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 34

Μερικές µέθοδοι των κλάσεων JButton,JMenuItem, και JLabel (3/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 35

Μερικές µέθοδοι των κλάσεων JButton,JMenuItem, και JLabel (4/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 36

Η κλάση Insets

• Τα αντικείµενα της κλάσης Insetsχρησιµοποιούνται για να καθορίζουν το µέγεθοςτου περιθωρίου σε ένα button ή menu item• Τα ορίσµατα που δίνονται όταν δηµιουργείται ένααντικείµενο της κλάσης Insets είναι σε pixels

• Η κλάση Insets βρίσκεται στο package java.awt

public Insets(int top, int left, int bottom, int right)

Page 13: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

13

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 37

Μπάρες Ολίσθησης - Scroll Bars

• Όταν δηµιουργείται µια text area, ο αριθµόςτων γραµµών που είναι ορατές και ο αριθµός τωνχαρακτήρων ανά γραµµή καθορίζεται ως εξής:JTextArea memoDisplay = new

JTextArea(15, 30);

• Όµως, είναι συχνά καλύτερο να µην χρειάζεταινα θέτουµε ένα σταθερό όριο στον αριθµό τωνγραµµών ή των χαρακτήρων ανά γραµµή• Αυτό µπορεί να γίνει µε χρήση των scroll bars στην

text area

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 38

Μπάρες Ολίσθησης - Scroll Bars

• Όταν χρησιµοποιούµε scroll bars, το κείµενοεικονίζεται διαµέσου ενός view port που δείχνειµόνο ένα τµήµα του κειµένου κάθε φορά• Ένα διαφορετικό τµήµα του κειµένου µπορεί νααπεικονιστεί µε χρήση των scroll bars πουτοποθετούνται κατά µήκος της πλευράς και της κάτωπλευράς της view port

• Οι scroll bars µπορεί να προστεθούν σε text areas µε χρήση της κλάσης JScrollPane• Η κλάση JScrollPane βρίσκεται στο packagejavax.swing

• Ένα αντικείµενο της κλάσης JScrollPane είναιόπως ένα view port µε scroll bars

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 39

View Port για µια Text Area

Page 14: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

14

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 40

Μπάρες Ολίσθησης - Scroll Bars• Όταν δηµιουργείται ένα JScrollPane, η text

area που θα απεικονιστεί δίνεται ως όρισµαJScrollPane scrolledText = new

JScrollPane(memoDisplay);

• Το JScrollPane µπορεί να προστεθεί σε ένανcontainer, όπως το JPanel ή JFrametextPanel.add(scrolledText);

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 41

Μπάρες Ολίσθησης - Scroll Bars

• Οι πολιτικές για τις scroll bar µπορεί να τεθούν ως εξής:scrolledText.setHorizontalScrollBarPolicy(

JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);scrolledText.setVerticalScrollBarPolicy(

JscrollPane.VERTICAL_SCROLLBAR_ALWAYS);

• Εάν παραληφθούν οι ενεργοποιήσεις αυτών των µεθόδων, τότεοι scroll bars θα είναι ορατές µόνο εάν χρήσιµες• Εάν όλο το κείµενο χωράει στο view port, τότε οι scroll bars δεν θαείναι ορατές

• Εάν προστεθεί αρκετό κείµενο, οι scroll bars θα εµφανιστούν αυτόµατα

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 42

Μερικές µέθοδοι της κλάσης JScrollPane(1/2)

Page 15: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

15

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 43

Μερικές µέθοδοι της κλάσης JScrollPane(2/2)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 44

Μια Text Area µε Scroll Bars (1/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 45

Μια Text Area µε Scroll Bars (2/8)

Page 16: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

16

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 46

Μια Text Area µε Scroll Bars (3/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 47

Μια Text Area µε Scroll Bars (4/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 48

Μια Text Area µε Scroll Bars (5/8)

Page 17: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

17

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 49

Μια Text Area µε Scroll Bars (6/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 50

Μια Text Area µε Scroll Bars (7/8)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 51

Μια Text Area µε Scroll Bars (8/8)

Page 18: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

18

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 52

Συνιστώσες µε µεταβαλλόµενη ορατότητα

• Ένα GUI µπορεί να έχει συνιστώσες που αλλάζουναπό ορατές σε µη ορατές και το ανάποδο

• Στο επόµενο παράδειγµα, η label µε τον Duke χωρίςνα χαιρετά δείχνεται πρώτα• Όταν κάνουµε click στο κουµπί "Wave", η label µε τον

Duke χωρίς να χαιρετά εξαφανίζεται και εµφανίζεται ηlabel µε τον Duke να χαιρετά

• Όταν κάνουµε click στο κουµπί "Stop", η label µε τονDuke να χαιρετά εξαφανίζεται, και επιστρέφει η label µετον Duke να µην χαιρετά

• Ο Duke είναι η mascot της Sun Microsystems για τηγλώσσα Java

• Μια συνιστώσα µπορεί να πάψει να είναι ορατήχωρίς να χρειάζεται να κάνουµε αόρατο ολόκληρο τοGUI

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 53

Labels µε µεταβαλλόµενη ορατότητα (1/6)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 54

Labels µε µεταβαλλόµενη ορατότητα (2/6)

Page 19: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

19

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 55

Labels µε µεταβαλλόµενη ορατότητα (3/6)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 56

Labels µε µεταβαλλόµενη ορατότητα (4/6)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 57

Labels µε µεταβαλλόµενη ορατότητα (5/6)

Page 20: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

20

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 58

Labels µε µεταβαλλόµενη ορατότητα (6/6)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 59

Σύστηµα συντεταγµένων για τα αντικείµεναγραφικών

• Όταν σχεδιάζουµε αντικείµενα στην οθόνη, ηJava χρησιµοποιεί ένα σύστηµα συντεταγµένωνόπου η αρχή, δηλ., το σηµείο (0,0) είναι στηνπάνω-αριστερή γωνία της οθόνης• Η x-συντεταγµένη (οριζόντια) είναι θετική καιαυξάνει προς τα δεξιά

• Η y-συντεταγµένη (κατακόρυφη) είναι θετική καιαυξάνει προς τα κάτω

• Όλες οι συντεταγµένες είναι κανονικά θετικές• Οι µονάδες και τα µεγέθη είναι σε pixels• Η περιοχή που χρησιµοποιείται για τη σχεδίαση είναιένα JFrame ή JPanel

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 60

Σύστηµα συντεταγµένων για τα αντικείµεναγραφικών• Το σηµείο (x,y) βρίσκεται x pixels από τηναριστερή ακµή της οθόνης, και y pixels προς τακάτω, από την κορυφή της οθόνης

• Όταν τοποθετούµε ένα ορθογώνιο στην οθόνη, καθορίζουµε τη θέση της πάνω-αριστερής γωνίαςτου

• Όταν τοποθετούµε ένα σχήµα, διαφορετικό απόορθογώνιο, στην οθόνη, η Java περικλείει τοσχήµα σε ένα φανταστικό ορθογώνιο, πουαποκαλείται περικλείον κουτί (bounding box),και τοποθετεί την πάνω-αριστερή γωνία αυτούτου ορθογωνίου

Page 21: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

21

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 61

Σύστηµα συντεταγµένων της οθόνης

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 62

Η µέθοδος paint και η κλάση Graphics

• Σχεδόν όλες οι Swing και οι σχετικές µε τοSwing συνιστώσες και containers έχουν µιαµέθοδο που λέγεται paint

• Η µέθοδος paint σχεδιάζει τη συνιστώσα ήcontainer στην οθόνη• Είναι ήδη ορισµένη, και καλείται αυτόµατα όταν τοσχήµα απεικονίζεται στην οθόνη

• Όµως, πρέπει να ξαναοριστεί για να σχεδιάσουµεγεωµετρικά σχήµατα όπως κύκλους και κουτιά

• Όταν την ξαναορίζουµε, πρέπει πάντα να περικλείουµετην παρακάτω δήλωση:super.paint(g);

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 63

Η µέθοδος paint και η κλάση Graphics

• Κάθε container και συνιστώσα που µπορεί νασχεδιαστεί στην οθόνη έχει συσχετισµένο ένααντικείµενο τύπου Graphics• Η κλάση Graphics είναι µια abstract class πουβρίσκεται στο package java.awt

• Αυτό το αντικείµενο έχει δεδοµένα πουκαθορίζουν ποια περιοχή της οθόνης καλύπτεταιαπό τη συνιστώσα ή τον container• Το αντικείµενο Graphics για ένα JFrameκαθορίζει ότι η σχεδίαση γίνεται µέσα από τα όρια τουαντικειµένου JFrame

Page 22: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

22

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 64

Η µέθοδος paint και η κλάση Graphics

• Το αντικείµενο g της κλάσης Graphicsµπορεί να χρησιµοποιηθεί ως το καλούναντικείµενο για µια µέθοδο σχεδίασης• Η σχεδίαση θα λάβει χώρα µέσα από την περιοχή τηςοθόνης που καθορίζεται από το g

• Η µέθοδος paint έχει µια παράµετρο g τύπουGraphics• Όταν ενεργοποιείται η µέθοδος paint, το gαντικαθίσταται από το αντικείµενο Graphics πουείναι συσχετισµένο µε το JFrame

• Εποµένως, τα σχήµατα σχεδιάζονται εντός τουJFrame

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 65

Σχεδιάζοντας ένα απλό πρόσωπο (1/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 66

Σχεδιάζοντας ένα απλό πρόσωπο (2/5)

Page 23: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

23

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 67

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

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 68

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

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 69

Σχεδιάζοντας ένα απλό πρόσωπο (5/5)

Page 24: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

24

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 70

Μερικές µέθοδοι της κλάσης Graphics (1/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 71

Μερικές µέθοδοι της κλάσης Graphics (2/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 72

Μερικές µέθοδοι της κλάσης Graphics (3/4)

Page 25: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

25

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 73

Μερικές µέθοδοι της κλάσης Graphics (4/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 74

Σχεδιάζοντας Ελλείψεις

• Μια έλλειψη (oval) σχεδιάζεται µε τη µέθοδοdrawOval• Τα ορίσµατα καθορίζουν τη θέση, το πλάτος (µεγάλοςάξονας) και το ύψος (µικρός άξονας) του µικρότερουορθογωνίου που περικλείει (το περιγεγραµµένοορθογώνιο) την έλλειψηg.drawOval(100, 50, 300, 200);

• Ένας κύκλος είναι µια ειδική περίπτωση τηςέλλειψης, όπου το πλάτος και το ύψος τουορθογωνίου είναι ίσα

g.drawOval(X_FACE, Y_FACE,FACE_DIAMETER, FACE_DIAMETER);

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 75

Σχεδιάζοντας ένα ευτυχισµένο πρόσωπο (1/5)

Page 26: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

26

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 76

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

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 77

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

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 78

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

Page 27: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

27

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 79

Σχεδιάζοντας ένα ευτυχισµένο πρόσωπο (5/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 80

Σχεδιάζοντας Τόξα-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 καθορίζουν τη θέσητου

• Τα τελευταία δυο ορίσµατα καθορίζουν το τµήµα που θαείναι ορατό

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 81

Καθορίζοντας ένα Τόξο-Arc (1/2)

Page 28: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

28

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 82

Καθορίζοντας ένα Τόξο-Arc (2/2)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 83

“Στρογγυλεµένα” (Rounded) ορθογώνια• Ένα rounded rectangle είναι ένα ορθογώνιο τουοποίου οι γωνίες έχουν αντικατασταθεί από τόξα έτσιώστε οι γωνίες του να είναι στρογγυλεµένες

g.drawRoundRect(x, y, width, height, arcWidth, arcHeight)

• Τα ορίσµατα x, y, width, και height καθορίζουν τοκανονικό οργογώνιο

• Τα τελευταία δυο ορίσµατα arcWidth, καιarcHeight, καθορίζουν τα τόξα που θα χρησιµοποιηθούνγια τις γωνίες

• Κάθε γωνία αντικαθίσταται µε ένα τέταρτο µιας έλλειψης τοοποίο έχει arcWidth pixels πλάτος και arcHeightpixels ύψος

• Όταν τα arcWidth και arcHeight είναι ίσα, οι γωνίεςθα είναι τόξα κύκλων

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 84

Ένα “στρογγυλεµένο” ορθογώνιο

Page 29: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

29

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 85

paintComponent για Panels• Ένα JPanel είναι ένα JComponent, αλλά έναJFrame είναι ένα Component, και όχι έναJComponent• Εποµένως, χρησιµοποιούν διαφορετικές µεθόδουςσχεδίασης στην οθόνη

• Τα σχήµατα µπορούν να σχεδιαστούν σε έναJPanel, και το JPanel µπορεί να τοποθετηθείσε ένα JFrame• Όταν ορίζουµε µια κλάση JPanel µε τον τρόπο αυτό, χρησιµοποιείται η µέθοδος paintComponent αντίτης µεθόδου paint

• Σε κάθε άλλη περίπτωση, οι λεπτοµέρειες είναι ίδιεςόπως εκείνες για ένα JFrame

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 86

Επίδειξη ενός paintComponent (1/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 87

Επίδειξη ενός paintComponent (2/4)

Page 30: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

30

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 88

Επίδειξη ενός paintComponent (3/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 89

Επίδειξη ενός paintComponent (4/4)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 90

Action Drawings και repaint

• Η µέθοδος repaint θα πρέπει ναενεργοποιείται όταν τα γραφικά περιεχόµενα τουπαραθύρου αλλάζουν• Η µέθοδος repaint κάνει κάποια προεργασία, καικατόπιν ενεργοποιεί τη µέθοδο paint, η οποίαξανασχεδιάζει την οθόνη

• Παρόλο που η µέθοδος repaint πρέπει ναενεργοποιείται ρητά, είναι ήδη ορισµένη

• Σε αντίθεση, η µέθοδος paint, πρέπει να ορίζεται, αλλά δεν ενεργοποιείται ρητά

Page 31: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

31

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 91

Ένα Action Drawing (1/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 92

Ένα Action Drawing (2/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 93

Ένα Action Drawing (3/7)

Page 32: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

32

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 94

Ένα Action Drawing (4/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 95

Ένα Action Drawing (5/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 96

Ένα Action Drawing (6/7)

Page 33: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

33

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 97

Ένα Action Drawing (7/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 98

Μερικές λεπτοµέρειες για την ενηµέρωσηενός GUI

• Στο Swing, οι περισσότερες αλλαγές στο GUI ενηµερώνονται αυτόµατα για να γίνουν ορατές στηνοθόνη• Αυτό γίνεται µε το αντικείµενο repaint manager

• Παρόλο που ο repaint manager λειτουργείαυτόµατα, υπάρχουν µερικές ενηµερώσεις που δεντις εκτελεί• Για παράδειγµα, εκείνες που γίνονται µε τις validateή repaint

• Μια άλλη µέθοδος ενηµέρωσης είναι η pack• Η pack αλλάζει το µέγεθος του παραθύρου στο

“επιθυµητό” µέγεθος

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 99

Η µέθοδος validate

• Μια ενεργοποίηση της validate προκαλεί σεέναν container να ξανατοποθετήσει τις συνιστώσεςτου στην οθόνη• Είναι ένα είδος µεθόδου "update" που κάνει τις αλλαγέςστις συνιστώσες να εµφανιστούν στην οθόνη

• Κάθε κλάση container έχει τη δική της µέθοδοvalidate, η οποία δεν δέχεται ορίσµατα

• Πολλές απλές αλλαγές σε ένα Swing GUI συµβαίνουν αυτόµατα, ενώ άλλες απαιτούνενεργοποίηση της validate ή κάποιας άλληςµεθόδου "update"• Όταν υπάρχει αµφιβολία δεν προκαλεί βλάβη ηενεργοποίηση της µεθόδου validate

Page 34: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

34

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 100

Καθορίζοντας το χρώµα σχεδίασης

• Η χρήση της µεθόδου drawLine µέσα σε µιαµέθοδο paint είναι παρόµοια µε τη σχεδίαση µεένα µολύβι το οποίο µπορεί να αλλάζει χρώµατα• Η µέθοδος setColor θα αλλάξει το χρώµα του

µολυβιού σχεδίασης• Το χρώµα που καθορίζεται µπορεί να αλλαχτείαργότερα µε µια άλλη ενεργοποίηση της setColorέτσι ώστε ένα σχέδιο µπορεί να έχει πολλαπλάχρώµαταg.setColor(Color.BLUE)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 101

Προσθέτοντας χρώµα

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 102

Ορίζοντας χρώµατα

• Τα standard χρώµατα στην κλάση Color είναιήδη ορισµένα• Αυτά παρατίθενται στην επόµενη διαφάνεια

• Η κλάση Color µπορεί να χρησιµοποιηθεί για ναοριστούν επιπλέον χρώµατα• Χρησιµοποιεί το σύστηµα χρωµάτων RGB, το οποίοχρησιµοποιεί διαφορετικές ποσότητες κόκκινου (red), πράσινου (green), και γαλάζιου (blue) χρώµατος για ναπαράξει οποιοδήποτε χρώµα

Page 35: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

35

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 103

Οι σταθερές χρώµατος

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 104

Ορίζοντας χρώµατα

• 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);

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 105

Παγίδα: Χρησιµοποιώντας 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;

Page 36: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

36

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 106

Μερικές µέθοδοι της κλάσης Color (1/2)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 107

Μερικές µέθοδοι της κλάσης Color (2/2)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 108

Το παράθυρο διαλόγου JColorChooser

• Η κλάση JColorChooser µπορεί ναχρησιµοποιηθεί για να επιτρέψουµε στο χρήστηνα επιλέξει ένα χρώµα

• Η µέθοδος showDialog της κλάσηςJColorChooser παράγει ένα παράθυροεπιλογής χρώµατος• Ο χρήστης µπορεί να επιλέξει ένα χρώµακαθορίζοντας τιµές RGB ή επιλέγοντας από δείγµαταχρωµάτων

sample Color = JColorChooser.showDialog(this,"JColorChooser", sampleColor);

Page 37: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

37

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 109

Το παράθυρο JColorChooser (1/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 110

Το παράθυρο JColorChooser (2/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 111

Το παράθυρο JColorChooser (3/5)

Page 38: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

38

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 112

Το παράθυρο JColorChooser (4/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 113

Το παράθυρο JColorChooser (5/5)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 114

Η µέθοδος drawString

• Η µέθοδος drawString είναι παρόµοια µε τιςµεθόδους σχεδίασης της κλάσης Graphics• Όµως, δείχνει κείµενο και όχι κάποιο σχέδιο• Εάν δεν καθοριστεί το font, χρησιµοποιείται ένα

default fontg.drawString(theText, X_START, Y_Start);

Page 39: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

39

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 115

Χρήση της drawString (1/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 116

Χρήση της drawString (2/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 117

Χρήση της drawString (3/7)

Page 40: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

40

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 118

Χρήση της drawString (4/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 119

Χρήση της drawString (5/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 120

Χρήση της drawString (6/7)

Page 41: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

41

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 121

Χρήση της drawString (7/7)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 122

Fonts• Ένα font είναι ένα αντικείµενο της κλάσης Font

• Η κλάση Font βρίσκεται στο package java.awt• Ο constructor της κλάσης Font δηµιουργεί ένα

font µε συγκεκριµένο στυλ και µέγεθος

Font fontObject = new Font("SansSerif", Font.PLAIN, POINT_SIZE);

• Ένα πρόγραµµα µπορεί να θέσει το font για τηµέθοδο drawString µέσα στη µέθοδο paintg.setFont(fontObject);

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 123

Τύποι των Font• Κάθε font που είναι διαθέσιµο στο σύστηµα µπορείνα χρησιµοποιηθεί από τη Java• Όµως, η Java εγγυάται ότι τουλάχιστον τρία fonts θαείναι διαθέσιµα : "Monospaced", "SansSerif", και"Serif"

• Τα Serifs είναι µικρές γραµµές που finish off τοτέλος των γραµµών στα γράµµατα• Αυτό το S έχει serifs, αλλά αυτό το S δεν έχει• Ένα "Serif" font έχει πάντα serifs• Το Sans σηµαίνει χωρίς, έτσι το "SansSerif" font δενέχει serifs

• "Monospaced" σηµαίνει ότι όλοι οι χαρακτήρες έχουνίδιο πλάτος

Page 42: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

42

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 124

Στυλ των Font

• Στα Fonts µπορεί να δοθεί συγκεκριµένο στυλ, όπωςbold ή italic• Πολλαπλά styles µπορούν να καθοριστούν συνδέοντάς τα

µε το σύµβολο | (δηλ., το δυαδικό σύµβολο του OR)new Font("Serif",Font.BOLD|Font.ITALIC, POINT_SIZE);

• Το µέγεθος ενός font αποκαλείται point size• Τα µεγέθη των χαρακτήρων καθορίζονται σε µονάδες γνωστές ως

points• Ένα point είναι το 1/72 µιας ίντσας (inch)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 125

FontDisplay.java (1/2)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 126

FontDisplay.java (2/2)

Page 43: java spring06 lec11 - delab.csd.auth.grdelab.csd.auth.gr/~dimitris/courses/java_spring06/... · 3 Τµ. ΜηχανικώνΗ/Υ , Τηλεπικοινωνιών& ∆ικτύων,

43

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 127

Εκτέλεση του FontDisplay.java

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 128

Μερικές µέθοδοι και σταθερές της κλάσηςFont (1/2)

Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ∆ικτύων, Πανεπιστήµιο Θεσσαλίας 129

Μερικές µέθοδοι και σταθερές της κλάσηςFont (2/2)