Οντοκεντρικόσ Προγραμματιςμόσ Ενότθτα 4: JAVA: ΔΙΕΠΑΦΕ ΧΡΗΣΗ, ΓΡΑΦΙΚΑ, APPLETS Γραφικζσ Διεπαφζσ Χριςτθ - awt Ιωάννθσ Χατηθλυγεροφδθσ Πολυτεχνικι χολι Σμιμα Μθχανικϊν Η/Τ & Πλθροφορικισ
ΓΡΑΦΙΚΕ ΔΙΕΠΑΦΕ ΧΡΗΣΗ -AWT Γραφικι διεπαφι χριςτθ είναι ζνα γραφικόσ τρόποσ επικοινωνίασ ενόσ προγράμματοσ με τον χριςτθ του. τθρίηεται ςτθν ζννοια των παρακφρων. Η επικοινωνία γίνεται μζςω μενοφ, κουμπιϊν κλπ. Εργαλεία o Χριςθ εργαλειοκικθσ awt - abstract windowing tool (ςτάνταρντ: java 1 - ςε αυτό κα αναφερκοφμε εδϊ) o Χριςθ εργαλειοκικθσ Swing (εξζλιξθ του awt: java 2) o Είναι δφο ςφνολα κλάςεων για δθμιουργία γραφικϊν διεπαφϊν χριςτθ 2/35
ΓΡΑΦΙΚΕ ΔΙΕΠΑΦΕ ΧΡΗΣΗ Εργαλειοκικθ AWT
ΔΗΜΙΟΤΡΓΙΑ ΔΙΕΠΑΦΗ 1. Δθμιουργία υποδοχζα o Δθμιουργοφμε το βαςικό παράκυρο τθσ εφαρμογισ 2. Δθμιουργία ςυςτατικϊν o Δθμιουργοφμε τα ςυςτατικά του παρακφρου 3. Κακοριςμόσ διαχειριςτι διάταξθσ o Προςδιορίηουμε τον τρόπο διάταξθσ των ςυςτατικϊν ςτο βαςικό παράκυρο 4. Προςκικθ ςυςτατικϊν o Ειςάγουμε τα ςυςτατικά ςτο παράκυρο 4/35
ΔΗΜΙΟΤΡΓΙΑ ΤΠΟΔΟΧΕΑ ΠΑΡΑΘΤΡΟΤ Διαδικαςία o Δθμιουργία υποκλάςθσ τθσ Frame o Δθμιουργία ςτιγμιοτφπου τθσ υποκλάςθσ ςτθ μζκοδο main τθσ υποκλάςθσ Δθμιουργοί τθσ Frame o Frame() Δθμιουργία παρακφρου χωρίσ τίτλο o Frame(String) Δθμιουρ. παρακ. με τίτλο Καλοφνται μζςω του super από το δθμιουργό τθσ υποκλάςθσ Αρχικά το παράκυρο δεν είναι ορατό και οι διαςτάςεισ του είναι μθδενικζσ 5/35
ΔΗΜΙΟΤΡΓΙΑ ΤΠΟΔΟΧΕΑ ΠΑΡΑΘΤΡΟΤ import java.awt.*; υμπερίλθψθ Εργαλειοκικθσ class MyApp extends Frame{ public MyApp(String title){ super(title) <δημιουπγία διαχειπιζηή διάηαξη> <δημιουπγία ζυζηαηικών> <πποζθήκη ζυζηαηικών> } Δθμιουργόσ Δθμιουργία ςτιγμιότυπου } public static void main(){ MyApp app1 = new MyApp("Application Window"); <διαχείπιζη παπαθύπου> } 6/35
ΜΕΘΟΔΟΙ ΧΕΙΡΙΜΟΤ ΠΑΡΑΘΤΡΟΤ setsize(int w, int h) setsize(java.awt.dimension d) o κακοριςμόσ διαςτάςεων παρακφρου (ςε pixels) setbounds(int x,int y,int w,int h) setbounds(java.awt.rectangle r) o κακοριςμόσ διαςτάςεων και κζςθσ παρακφρου(ςε pixels) pack() o μικρότερο δυνατό μζγεκοσ παρακ. setvisible(boolean) o εμφάνιςθ ι απόκρυψθ παρακφρου 7/35
ΤΣΗΜΑ ΤΝΣΕΣΑΓΜΕΝΩΝ Αρχι αξόνων (0,0) θ πάνω αριςτερι γωνία είτε τθσ οκόνθσ είτε του παρακφρου, είτε του χϊρου του Applet υντεταγμζνεσ: (πλάτοσ, φψοσ) (0,0) 102 X 35 (102,35) Y 8/35
ΔΙΑΧΕΙΡΙΣΕ ΔΙΑΣΑΞΗ (1) Διάταξθ ροισ (Κλάςθ: FlowLayout) FlowLayout() o ςυςτατικά το ζνα μετά το αλλο (αριςτ. δεξιά) ςτο κζντρο FlowLayout(int) o ςτοίχθςθ ανάλογα με το int (FlowLayout.LEFT/RIGHT/CENTER) FlowLayout(int,int,int) o + οριηόντιο και κατακόρυφο διάκενο ςε pixels (2ο, 3ο int) 9/35
ΔΙΑΧΕΙΡΙΣΕ ΔΙΑΣΑΞΗ (2) Περιφερειακι διάταξθ (Κλάςθ: BorderLayout) BorderLayout() o διάταξθ χωρίσ διάκενα BorderLayout(int,int) o οριηόντιο και κατακόρυφο διάκενο ςε pixels 10/35
ΔΙΑΧΕΙΡΙΣΕ ΔΙΑΣΑΞΗ (3) Διάταξθ πλζγματοσ (Κλάςθ: GridLayout) GridLayout(int,int) o ςυςτατικά ςε κελιά πλζγματοσ int x int. o Σα υςτατικά καταλαμβάνουν όλο τον χϊρο των κελιϊν o Όλα τα κελιά ζχουν το ίδιο μζγεκοσ o Αν ζνασ (όχι και οι δφο) int είναι 0 το πλζγμα επεκτείνεται απεριόριςτα προσ αυτι τθν κατεφκυνςθ κακϊσ προςκζτουμε ςυςτατικά GridLayout(int,int,int,int) o + οριηόντιο και κατακόρυφο διάκενο (3ο, 4ο int) ςε pixels GridLayout() o Πλζγμα μιασ γραμμισ και απεριόριςτων ςτθλϊν 11/35
ΔΙΑΧΕΙΡΙΣΕ ΔΙΑΣΑΞΗ (4) Κακοριςμόσ Διαχειριςτι Διάταξθσ 1. Δθμιουργία διαχειριςτι (δθλ. Δθμιουργία ςτιγμιοτφπου μζςω των δθμιουργϊν των προθγοφμενων κλάςεων) 2. Ενεργοποίθςθ διαχειριςτι o Μζκοδοσ setlayout (<layout instance>) 12/35
ΤΠΟΔΟΧΕA PANEL Panel: Ζνασ υποδοχζασ που περιζχει ςυςτατικά Είναι ςαν ζνασ αόρατοσ υποδοχζασ που πρζπει να τοποκετθκεί ςε ζνα top-level υποδοχζα (όπωσ ζνα Frame) Ζνα panel μπορεί να είναι ζνκετο (nested) μζςα ςε ζνα άλλο panel. Δφο Δθμιουργοί: o Panel() Default layout manager: FlowLayout o Panel(LayoutManager) 13/35
ΚΑΘΟΡΙΜΟ ΓΡΑΜΜΑΣΟΕΙΡΑ 1. Δθμιουργία ςτιγμιοτφπου Font( <font>, <style>, <size>); <style>: Font.PLAIN/BOLD/ITALIC Π.χ. Font f1 = new Font( Helvetica, Font.BOLD +Font.ITALIC, 14); 2. Ανάκεςθ γραμματοςειράσ setfont(<font instance>); Π.χ. setfont (f1); 14/35
ΠΡΟΘΗΚΗ ΤΣΑΣΙΚΩΝ Μζκοδοι: add(c) add(string, c) (περίπτωςθ διαχειριςτι περιφερειακισ διάταξθσ) 15/35
ΚΑΘΟΡΙΜΟ ΧΡΩΜΑΣΟ ΤΠΟΒΑΘΡΟΤ setbackground(color.<color>); Π.χ. setbackground (Color.green); 16/35
ΕΣΙΚΕΣΕ Κλάςθ: Label Δθμιουργοί: Label() Label(String) Label(String, int) (όπου int Label.LEFT/CENTER/RIGHT) Project BlueJ: GuiLab 17/35
ΠΛΗΚΣΡΑ/ΚΟΤΜΠΙΑ Κλάςθ: Button Δθμιουργοί: Button() Button(String) Μζκοδοι: setlabel(string) getlabel() Project BlueJ: GuiBut, GuiLabBut 18/35
ΠΛΑΙΙΑ ΕΛΕΓΧΟΤ Κλάςθ: Checkbox Δθμιουργοί: Checkbox() Checkbox(String) Μζκοδοι: setstate(boolean) getstate() Δθμιουργία ανεξάρτθτων πλαιςίων (μπορεί να είναι επιλεγμζνα οποιαδιποτε κάκε φορά). Project BlueJ: GuiCheck 19/35
ΟΜΑΔΟΠΟΙΗΜΕΝΑ ΠΛΑΙΙΑ ΕΛΕΓΧΟΤ Κλάςθ: CheckboxGroup Δθμιουργόσ: CheckboxGroup() Διαδικαςία: 1. Δθμιουργία ςτιγμιοτφπου ομάδασ πλαιςίων 2. υςχετιςμόσ πλαιςίων με το ςτιγμιότυπο Δθμιουργόσ Checkbox(String, boolean, instance) Δθμιουργία ομαδοποιθμζνων πλαιςίων (μπορεί να είναι επιλεγμζνο ζνα κάκε φορά). 20/35
ΠΑΡΑΔΕΙΓΜΑ Βιμα 1 : CheckboxGroup lang = new CheckboxGroup(); Βιμα 2 : Checkbox c1 = new Checkbox ( Pascal, false, lang); Checkbox c2 = new Checkbox ( Java, false, lang); Κλπ Project BlueJ: GuiCheckGroup 21/35
ΛΙΣΕ ΕΠΙΛΟΓΗ (1) Κλάςθ: Choice Δθμιουργόσ: Choice() Διαδικαςία: 1. Δθμιουργία ςτιγμιοτφπου λίςτασ Choice langch = new Choice (); 2. Προςκικθ ςτοιχείων λίςτασ langch.add("pascal"); 3. Προςκικθ τθσ λίςτασ ςτον υποδοχζα add(langch); Project BlueJ: GuiList1 Δθμιουργία αναδιπλοφμενθσ λίςτασ (μπορεί να είναι επιλεγμζνο ζνα ςτοιχείο κάκε φορά). 22/35
ΛΙΣΕ ΕΠΙΛΟΓΗ (2) Μζκοδοι: getitem(int) Επιςτρζφει το ςτοιχείο ςτθ κζςθ int (πρϊτθ κζςθ: 0) getitemcount() Επιςτρζφει τον αρικμό των ςτοιχείων τθσ λίςτασ select(int) Επιλζγει το ςτοιχείο ςτθ κζςθ int select(string) Επιλζγει το πρϊτο ςτοιχείο με όνομα το String getselectedindex() Επιςτρζφει τθ κζςθ του τρζχοντοσ επιλεγμζνου ςτοιχείου getselecteditem() Επιςτρζφει το όνομα του τρζχοντοσ επιλεγμζνου ςτοιχείου 23/35
ΛΙΣΕ ΚΤΛΙΗ (1) Κλάςθ: List Δθμιουργοί: List() (Δθμιουργεί κενι λίςτα κφλιςθσ, επιτρζπει επιλογι μόνο ενόσ ςτοιχείου) List(int, boolean) (Δθμιουργεί λίςτα με κακοριςμζνο αρικμό: int ςτοιχείων, επιτρζπει πολλαπλι επιλογι μόνο αν το 2ο όριςμα είναι true) Διαδικαςία: ίδια με λίςτεσ επιλογισ Δθμιουργία μθ αναδιπλοφμενθσ λίςτασ (μπορεί να είναι επιλεγμζνα περιςςότερα από ζνα ςτοιχείο κάκε φορά). Project BlueJ: GuiList2 24/35
ΛΙΣΕ ΚΤΛΙΗ (2) Μζκοδοι: Σισ ίδιεσ με μιασ λίςτασ επιλογισ ςυν: getselectedindexes() Επιςτρζφει τισ κζςεισ των επιλεγμζνων ςτοιχείων (περίπτωςθ πολλαπλισ επιλογισ) getselecteditems() Επιςτρζφει τα ονόματα των επιλεγμζνων ςτοιχείων (περίπτωςθ πολλαπλισ επιλογισ) 25/35
ΠΕΔΙΑ ΚΕΙΜΕΝΟΤ (1) Κλάςθ: TextField Δθμιουργοί: TextField() (Δθμιουργεί κενό πεδίο κειμζνου χωρίσ κακοριςμζνο μικοσ) TextField(String) (Δθμιουργεί ζνα πεδίο με περιεχόμενο String, χωρίσ κακοριςμζνο μικοσ) TextField(String, int) (Δθμιουργεί ζνα πεδίο με περιεχόμενο String, και κακοριςμζνο μικοσ, για int χαρακτιρεσ) Project BlueJ: GuiText1 26/35
ΠΕΔΙΑ ΚΕΙΜΕΝΟΤ (2) Μζκοδοι: setechochar(char) Απόκρυψθ πλθκτρολογοφμενων χαρακτιρων με ζνα κοινό χαρακτιρα. gettext() Επιςτρζφει το κζιμενο του πεδίου settext(string) Γεμίηει το πεδίο με το String seteditable(boolean) Κάνει το πεδίο επεξεργάςιμο/προεπιλεγμζνο (με true) ι όχι (με false) iseditable() Επιςτρζφει true αν το πεδίο είναι επεξεργάςιμο και false αν όχι 27/35
ΠΕΡΙΟΧΕ ΚΕΙΜΕΝΟΤ (1) Κλάςθ: TextArea Δθμιουργοί: TextArea() (Δθμιουργεί κενι περιοχι κειμζνου χωρίσ κακοριςμζνο φψοσ, πλάτοσ) TextArea(int, int) (Δθμιουργεί κενι περιοχι κειμζνου με κακοριςμζνο φψοσ, πλάτοσ) TextArea(String) (Δθμιουργεί μια περιοχι κειμζνου που περιζχει το String χωρίσ κακοριςμζνο φψοσ, πλάτοσ) TextArea(String, int, int) (Δθμιουργεί μια περιοχι κειμζνου που περιζχει το String με κακοριςμζνο φψοσ, πλάτοσ) Project BlueJ: GuiText2 28/35
ΠΕΡΙΟΧΕ ΚΕΙΜΕΝΟΤ(2) Μζκοδοι: Σισ ίδιεσ με των πεδίων κειμζνου ςυν insert(string, int) Ειςάγει το String ςτθ κζςθ που δείχνει το int replacerange(string, int, int) Αντικακιςτά το κείμενο μεταξφ των κζςεων int με το String 29/35
Χρθματοδότθςθ Σο παρόν εκπαιδευτικό υλικό ζχει αναπτυχκεί ςτo πλαίςιo του εκπαιδευτικοφ ζργου του διδάςκοντα. Σο ζργο «Ανοικτά Ακαδθμαϊκά Μακιματα ςτο Πανεπιςτιμιο Ακθνών» ζχει χρθματοδοτιςει μόνο τθν αναδιαμόρφωςθ του εκπαιδευτικοφ υλικοφ. Σο ζργο υλοποιείται ςτο πλαίςιο του Επιχειρθςιακοφ Προγράμματοσ «Εκπαίδευςθ και Δια Βίου Μάκθςθ» και ςυγχρθματοδοτείται από τθν Ευρωπαϊκι Ζνωςθ (Ευρωπαϊκό Κοινωνικό Σαμείο) και από εκνικοφσ πόρουσ. 30/35
θμείωμα Ιςτορικοφ Εκδόςεων Ζργου Σο παρόν ζργο αποτελεί τθν ζκδοςθ 1.0. 31/35
θμείωμα Αναφοράσ Copyright: Πανεπιςτιμιον Πατρϊν, Ιωάννθσ Χατηθλυγεροφδθσ, 2015. «Οντοκεντρικόσ Προγραμματιςμόσ». Ζκδοςθ: 1.0. Πάτρα 2015. Διακζςιμο από τθ δικτυακι διεφκυνςθ: https://eclass.upatras.gr/courses/ceid1105/ 32/35
θμείωμα Αδειοδότθςθσ Σο παρόν υλικό διατίκεται με τουσ όρουσ τθσ άδειασ χριςθσ Creative Commons Αναφορά, Μθ Εμπορικι Χριςθ Παρόμοια Διανομι 4.0 *1+ ι μεταγενζςτερθ, Διεκνισ Ζκδοςθ. Εξαιροφνται τα αυτοτελι ζργα τρίτων π.χ. φωτογραφίεσ, διαγράμματα κ.λ.π., τα οποία εμπεριζχονται ςε αυτό και τα οποία αναφζρονται μαηί με τουσ όρουσ χριςθσ τουσ ςτο «θμείωμα Χριςθσ Ζργων Σρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ωσ Μθ Εμπορικι ορίηεται θ χριςθ: που δεν περιλαμβάνει άμεςο ι ζμμεςο οικονομικό όφελοσ από τθν χριςθ του ζργου, για το διανομζα του ζργου και αδειοδόχο που δεν περιλαμβάνει οικονομικι ςυναλλαγι ωσ προχπόκεςθ για τθ χριςθ ι πρόςβαςθ ςτο ζργο που δεν προςπορίηει ςτο διανομζα του ζργου και αδειοδόχο ζμμεςο οικονομικό όφελοσ (π.χ. διαφθμίςεισ) από τθν προβολι του ζργου ςε διαδικτυακό τόπο Ο δικαιοφχοσ μπορεί να παρζχει ςτον αδειοδόχο ξεχωριςτι άδεια να χρθςιμοποιεί το ζργο για εμπορικι χριςθ, εφόςον αυτό του ηθτθκεί.
Διατιρθςθ θμειωμάτων Οποιαδιποτε αναπαραγωγι ι διαςκευι του υλικοφ κα πρζπει να ςυμπεριλαμβάνει: το θμείωμα Αναφοράσ το θμείωμα Αδειοδότθςθσ τθ διλωςθ Διατιρθςθσ θμειωμάτων το θμείωμα Χριςθσ Ζργων Σρίτων (εφόςον υπάρχει) μαηί με τουσ ςυνοδευόμενουσ υπερςυνδζςμουσ. 34/35
θμείωμα Χριςθσ Ζργων Σρίτων 35/35