Οντοκεντρικόσ Προγραμματιςμόσ Ενότθτα 4: JAVA: ΔΙΕΠΑΦΕ ΧΡΘΣΘ, ΓΡΑΦΙΚΑ, APPLETS Γραφικά, Java Applets Ιωάννθσ Χατηθλυγεροφδθσ Πολυτεχνικι χολι Σμιμα Μθχανικϊν Θ/Τ & Πλθροφορικισ
ΓΡΑΦΙΚΑ με JAVA2D
Μζςω τθσ Java2D: ΧΡΗΗ ΓΡΑΦΙΚΩΝ o Ζνα ςφνολο κλάςεων που υποςτθρίηει υψθλισ ποιότθτασ 2D γραφικά, εικόνεσ, χρϊμα και κείμενο o Περιλαμβάνει κλάςεισ από awt και swing Βαςικι κλάςθ: Graphics2D o Επζκταςθ τθσ Graphics για καλφτερθσ ποιότθτασ γραφικά 3/28
ΜΕΘΟΔΟΙ ΚΛΑΗ GRAPHICS χιματα Ζνα ςχιμα μπορεί να είναι filled ι unfilled, ανάλογα με τθ μζκοδο Οι παράμετροι των μεκόδων κακορίηουν ςυντεταγμζνεσ και μεγζκθ 4/28
ΜΕΘΟΔΟΙ ΚΛΑΗ GRAPHICS Γραμμζσ 10 150 X 20 45 X g.drawline(10, 20, 150, 45); ή g.drawline(150, 45, 10, 20); 5/28
ΜΕΘΟΔΟΙ ΚΛΑΗ GRAPHICS Ορκογϊνια 50 X 20 40 100 X g.drawrect(50, 20, 100, 40); 6/28
ΜΕΘΟΔΟΙ ΚΛΑΗ GRAPHICS Ελλείψεισ 20 175 X 80 X περικλείων ορκογϊνιο 50 g.drawoval(175, 20, 50, 80); Ένα τόξο(arc)είναι ένα τμήμα μιας έλλειψης g.drawarc(175, 20, 50, 80, 0, 45); 7/28
ΜΕΘΟΔΟΙ ΚΛΑΗ GRAPHICS Μζκοδοι χεδίαςθσ χθμάτων (υποςφνολο): drawline(startx, starty, endx, endy) drawrect(startx, starty, width, height) fillrect(startx, starty, width, height) drawroundrect(startx, starty, width, height, arcwidth, archeight) fillroundrect(startx, starty, width, height, arcwidth, archeight) draw3drect(startx, starty, width, height, boolean value) fill3drect(startx, starty, width, height, boolean value) drawpolygon(arrayx, arrayy, array length) fillpolygon(arrayx, arrayy, array length) drawpolyline(arrayx arrayx, arrayy arrayy, array length) fillpolyline(arrayx arrayx, arrayy arrayy, array length) drawoval(topcornerx, TopCornerY, width, height) filloval(topcornerx, TopCornerY, width, height) drawarc(topcornerx, TopCornerY, width, height, arcstart, arcstop) fillarc(topcornerx, TopCornerY, width, height, arcstart, arcstop) Μζκοδοι αντιγραφισ - κακαριςμοφ περιοχϊν: copyarea(startx, StartY, Width, Height, dx, dy) clearrect(startx, StartY, Width, Height) 8/28
ΚΛΑΗ COLOR Ζνα χρϊμα ορίηεται με χριςθ ενόσ ςτιγμιότυπου τθσ κλάςθσ Color o Color mycolor = new Color(200, 90, 30); Κάκε drawing surface ζχει ζνα background color Κάκε graphics context ζχει ζνα τρζχον foreground color και font (type, size). Και τα δφο μποροφν να αλλάξουν δυναμικά o setbackground(c) o g.setcolor(c) g.setfont(f) Μερικά predefined colors: Object RGB Value Color.black 0, 0, 0 Color.blue 0, 0, 0 Color.cyan 0, 255, 255 Color.orange 255, 255, 0 Color.white 255, 255, 255 Color.yellow 255, 255, 0 9/28
Graphics 2D χεδιαςμόσ γραφικϊν ςε ζνα Jpanel Public void paintcomponent (Graphics comp){ Graphics2D comp2d = (Graphics2D) comp; Font myfont = new Font("Arial", Font.ITALIC, 14); comp2d.setfont(myfont); comp2d.setcolor(color.orange); comp2d.drawstring("hello!!! ", 100, 50); } Θ μζκοδοσ paintcomponent() καλείται αυτόματα κάκε φορά που ο υποδοχζασ πρζπει να ςχεδιαςτεί ξανά υνικθσ μζκοδοσ: Δθμιουργοφμε μια υποκλάςθ τθσ Jpanel και υπερςκελίηουμε τθν paintcomponent(). 10/28
Graphics2D Κακοριςμόσ πζνα ςχεδίαςθσ Σα αντικείμενα που προςδιορίηουν ςχιματα ανικουν ςτο πακζτο κλάςεων java.awt.geom. Όλα τα ςχιματα ςχεδιάηονται με γραμμζσ που ζχουν πλάτοσ ζνα pixel Θ αλλαγι του πάχουσ των γραμμϊν γίνεται με τθν δθμιουργία μιασ «πζνασ» ωσ εξισ: BasicStroke brush = new BasicStroke(5); comp2d.setstroke(brush); Επίςθσ μποροφμε με τθν BasicStroke να κακορίςουμε το ςτυλ τελειϊματοσ μια γραμμισ και το ςτυλ τθσ ζνωςθσ ανάμεςα ςε δυο ευκφγραμμα τμιματα 11/28
Γραμμζσ: Ορκογϊνια: Graphics2D Δθμιουργία Αντικειμζνων χεδίαςθσ Line2D.Float line1 = new Line2D.Float( 40F, 200F, 70F, 130F); comp2d.draw(line1); Rectangle2D.Float rect1 = new Rectangle2D.Float (10F,20F,50F,60F); comp2d.draw(rect1); Ορκογϊνια (με ςτρογγυλεμζνεσ γωνίεσ): Rectangle2D.Float.rect2 = new Rectangle2D.Float(10F,20F,50F,60F, 15F, 15F); comp2d.draw(rect2); Μετά τθν δθμιουργία του ςχιματοσ αυτό μπορεί να ςχεδιαςτεί με τισ μεκόδουσ draw() και fill(). H fill() γεμίηει ζνα ςχιμα με μοτίβα γεμίςματοσ ι με ζνα μόνο χρϊμα. 12/28
Graphics2D Δθμιουργία Αντικειμζνων χεδίαςθσ Κφκλοι ι ελλείψεισ: Σόξα: Ellipse2D..Float circle = new Ellipse2D.Float(50F, 100F, 20F, 20F); Arc2D.Float arc = new Arc2D.Float (10F,20F,30F,30F,45F,120F, Arc2D.Float.OPEN); Θ ςχεδίαςθ πολυγϊνου γίνεται ϊσ: GeneralPath poligono = new GeneralPath(); // Δθμιουργία poligono.moveto(10f, 20F) // Αρχικό ςθμείο poligono.lineto(20f, 10F) //Επόμενο ςθμείο poligono.lineto(30f, 60F) //Επόμενο ςθμείο poligono.closepath(); //Κλείςιμο πολυγϊνου 13/28
JAVA APPLETS
JAVA APPLETS Ζνα Java application είναι ζνα αυτόνομο (stand-alone) πρόγραμμα που διακζτει μια main μζκοδο. Ζνα Java applet είναι ζνα πρόγραμμα που κα πρζπει να μεραφερκεί μζςω του Web ςε ζνα web browser και να εκτελεςτεί ςτα πλαίςια του. Ζνα applet μπορεί επίςθσ να εκτελεςκεί και με τθ χριςθ του appletviewer tool του Java Software Development Kit Ζνα applet δεν ζχει main μζκοδο Αντίκετα, υπάρχουν μια ςειρά από μεκόδουσ που εξυπθρετοφν ςυγκεκριμζνουσ ςκοποφσ. 15/28
JAVA APPLETS Βιματα δθμιουργίασ ενόσ Java Applet Γράφουμε τον πθγαίο κϊδικα, π.χ. TestApplet.java Μεταφράηουμε το Applet για να παραχκεί το αρχείο TestApplet.class Ενςωματϊνουμε το Applet ςε μια ιςτοςελίδα χρθςιμοποιϊντασ (κατ ελάχιςτο) τθν ετικζτα <Applet> θ οποία ζχει τθν εξισ (ελάχιςτθ) μορφι: <applet code= TestApplet.class width=πλάτοσ height=φψοσ></applet> Ζνα Applet εκτελείται όταν φορτϊνεται θ ιςτοςελίδα που το περιζχει ςε κάποιον browser 16/28
JAVA APPLETS HTML αρχείο: <HTML> <HEAD> <TITLE>Test Applet</TITLE> </HEAD> <BODY> <APPLET CODE= " TestApplet.class" WIDTH=200 HEIGHT=200> </APPLET> </BODY> </HTML> 17/28
JAVA APPLETS Υποκλάςθ τθσ κλάςθσ java.applet.applet 18/28
JAVA APPLETS HelloWorld: import java.applet.*; import java.awt.*; public class HelloWorldApplet extends Applet{ public void paint(graphics g){ g.drawstring("hello world!", 50, 25); } } 19/28
ΚΥΚΛΟ ΖΩΗ ΕΝΟ APPLET 1. O browser δθμιουργεί ζνα ςτιγμιότυπο τθσ κλάςθσ Applet με χριςθ του default constructor 2. Σο applet εμφανίηεται ςτθν ιςτοςελίδα ςτθ κζςθ και με το μζγεκοσ που κακορίηεται ςτον HTML κϊδικα 3. O browser εκτελεί τθν init() μζκοδο του applet 4. Ο browser εκτελεί τθν start() μζκοδο του applet 5. Ο browser εκτελεί τθν paint() μζκοδο του applet 6. Σο applet είναι ενεργό και «τρζχει» 7. Ο browser καλεί τθν paint() κάκε φορά που το applet πρζπει να «ξαναηωγραφιςτεί» 8. Ο browser εκτελεί τθν stop() μζκοδο όταν ο χριςτθσ φεφγει από τθν ιςτοςελίδα ι το applet είναι ζτοιμο να καταςτραφεί 9. Ο browser εκτελεί τθν destroy() μζκοδο αμζςωσ πριν καταςτρζψει το applet 20/28
ΒΑΙΚΕ ΜΕΘΟΔΟΙ APPLET init(). Αρχικοποίθςθ Εκτελείται μία φορά όταν δθμιουργείται το applet. Χρθςιμοποιείται για αρχικοποίθςθ, π.χ. μεταβλθτϊν του applet. start(). Εκκίνθςθ εκτζλεςθσ Εκτελείται τθν πρϊτθ φορά αλλά και κάκε φορά που ο ζλεγχοσ επανζρχεται από τον browser ςτθν HTML ςελίδα που περιζχει το applet (εκκίνθςθ threads, animation, playing sound, κλπ.) stop(). Σερματιςμόσ εκτζλεςθσ Πριν τθν καταςτροφι του applet και όταν ο χριςτθσ εγκαταλείπει τθν ιςτοςελίδα. Συπικά, τερματιίηεται ότι ξεκίνθςε ςτθ start(). destroy(). Καταςτροφι ςτιγμιότυπου garbage collection. 21/28
ΒΑΙΚΕ ΜΕΘΟΔΟΙ APPLET paint(graphics g). Ηωγράφιςε το applet Εκτελείται κάκε φορά που πρζπει να ηωγραφιςτεί το περιεχόμενο του applet o Μετά τθν start() o Όταν το παράκυρο ζρχεται ςτο προςκινιο o Όταν το ηθτάει το πρόγραμμα Θ paint() κλθρονομείται από τθν κλάςθ java.awt.container Θ παράμετροσ java.awt.graphics αναπαριςτά το τμιμα τθσ οκόνθσ που το applet μπορεί να ηωγραφίςει 22/28
Χρθματοδότθςθ Σο παρόν εκπαιδευτικό υλικό ζχει αναπτυχκεί ςτo πλαίςιo του εκπαιδευτικοφ ζργου του διδάςκοντα. Σο ζργο «Ανοικτά Ακαδθμαϊκά Μακιματα ςτο Πανεπιςτιμιο Ακθνϊν» ζχει χρθματοδοτιςει μόνο τθν αναδιαμόρφωςθ του εκπαιδευτικοφ υλικοφ. Σο ζργο υλοποιείται ςτο πλαίςιο του Επιχειρθςιακοφ Προγράμματοσ «Εκπαίδευςθ και Δια Βίου Μάκθςθ» και ςυγχρθματοδοτείται από τθν Ευρωπαϊκι Ζνωςθ (Ευρωπαϊκό Κοινωνικό Σαμείο) και από εκνικοφσ πόρουσ. 23/28
θμείωμα Ιςτορικοφ Εκδόςεων Ζργου Σο παρόν ζργο αποτελεί τθν ζκδοςθ 1.0. 24/28
θμείωμα Αναφοράσ Copyright: Πανεπιςτιμιον Πατρϊν, Ιωάννθσ Χατηθλυγεροφδθσ, 2015. «Οντοκεντρικόσ Προγραμματιςμόσ». Ζκδοςθ: 1.0. Πάτρα 2015. Διακζςιμο από τθ δικτυακι διεφκυνςθ: https://eclass.upatras.gr/courses/ceid1105/ 25/28
θμείωμα Αδειοδότθςθσ Σο παρόν υλικό διατίκεται με τουσ όρουσ τθσ άδειασ χριςθσ Creative Commons Αναφορά, Μθ Εμπορικι Χριςθ Παρόμοια Διανομι 4.0 *1+ ι μεταγενζςτερθ, Διεκνισ Ζκδοςθ. Εξαιροφνται τα αυτοτελι ζργα τρίτων π.χ. φωτογραφίεσ, διαγράμματα κ.λ.π., τα οποία εμπεριζχονται ςε αυτό και τα οποία αναφζρονται μαηί με τουσ όρουσ χριςθσ τουσ ςτο «θμείωμα Χριςθσ Ζργων Σρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ωσ Μθ Εμπορικι ορίηεται θ χριςθ: που δεν περιλαμβάνει άμεςο ι ζμμεςο οικονομικό όφελοσ από τθν χριςθ του ζργου, για το διανομζα του ζργου και αδειοδόχο που δεν περιλαμβάνει οικονομικι ςυναλλαγι ωσ προχπόκεςθ για τθ χριςθ ι πρόςβαςθ ςτο ζργο που δεν προςπορίηει ςτο διανομζα του ζργου και αδειοδόχο ζμμεςο οικονομικό όφελοσ (π.χ. διαφθμίςεισ) από τθν προβολι του ζργου ςε διαδικτυακό τόπο Ο δικαιοφχοσ μπορεί να παρζχει ςτον αδειοδόχο ξεχωριςτι άδεια να χρθςιμοποιεί το ζργο για εμπορικι χριςθ, εφόςον αυτό του ηθτθκεί.
Διατιρθςθ θμειωμάτων Οποιαδιποτε αναπαραγωγι ι διαςκευι του υλικοφ κα πρζπει να ςυμπεριλαμβάνει: το θμείωμα Αναφοράσ το θμείωμα Αδειοδότθςθσ τθ διλωςθ Διατιρθςθσ θμειωμάτων το θμείωμα Χριςθσ Ζργων Σρίτων (εφόςον υπάρχει) μαηί με τουσ ςυνοδευόμενουσ υπερςυνδζςμουσ. 27/28
θμείωμα Χριςθσ Ζργων Σρίτων 28/28