Δημιουργία αντικειμένων γραφικών διεπαφών (GUI objects) // Δημιουργία πλήκτρου με κείμενο OK JButton jbtok = new JButton("OK");

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

Διδάσκων: Παναγιώτης Ανδρέου

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

Week 12: GUIs with Swing

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

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

8. Το μοντέλο συμβάντων του AWT

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

Week 10: Graphical User Interfaces

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

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

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

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

8.1 Top-Level Swing Containers και Swing Components

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

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

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

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

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

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

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

7. Ανάπτυξη GUI σε Java

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

Το επόμενο σχήμα εμφανίζει την ιεραρχία των GUI-components κλάσεων μαζί με κάποιες επιπλέον συμπληρωματικές κλάσεις που διαχειρίζονται ένα GUI.

Γενικά (για τις γραπτές εξετάσεις)

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

Σύνθεταγραφικάσ ε Java

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

9. Η βιβλιοθήκη Components του AWT

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2008 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

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

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

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

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

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

Σχεδόν όλες οι ιστοσελίδες βασίζονται σε μεγάλο βαθμό σε πίνακες. Για να εισάγουμε έναν πίνακα επιλέγουμε από το μενού Insert->Table.

Προγραμματισμός ΙΙ (Java) 8-9. Γραφικές Διεπαφές

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

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

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

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

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

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

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

1. Κλικ στην καρτέλα Insert 2. Tables 3. Κλικ Table 4. Σύρουμε το δείκτη του ποντικιού και επιλέγουμε τον επιθυμητό αριθμό γραμμών και στηλών

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

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

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

αντίστοιχο γεγονός. Όταν όντως το κουμπί

Εισαγωγή. Κεφάλαιο 2: Βασικές έννοιες Java Κεφάλαιο 3: Χρήση της Java στις σελίδες σας Κεφάλαιο 4: Οι πρώτες σας μικροεφαρμογές...

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5)

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

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

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

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

Δημιουργία ενός κενού πίνακα

Java Μέρος Ι Αντικειμενοστρεφής Προγραμματισμός - 7

1. Κλικ στην καρτέλα Insert 2. Tables 3. Κλικ Table 4. Σύρουμε το δείκτη του ποντικιού και επιλέγουμε τον επιθυμητό αριθμό γραμμών και στηλών

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

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

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

Εργαστήριο του Μαθήματος: ΕΠΛ003. Ενότητα 3 Εισαγωγή στο Microsoft Word

2.1 Αντικειµενοστρεφής προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Εργαστήριο του Μαθήματος: ΕΠΛ001

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Περιεχόμενα. Πρόλογος... 17

ΓΡΑΦΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ ΜΕ ΕXCEL

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

Atlantis - Νέο user interface

να ακολουθήσουμε Έναρξη Όλα τα Προγράμματα και να ενεργοποιήσουμε την επιλογή Microsoft Word.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Πρακτικές οδηγίες για την Επεξεργασία Κειμένου

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

ΜΑΘΗΜΑ Στοίχιση Παραγράφων. 2. Εσοχές Παραγράφων ΣΤΟΧΟΙ:

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Δραστηριότητα 1. Προγραμματίζω τον υπολογιστή (10 ώρες).

12.6. Άσκηση 6 - [αξιοποίηση γραφικής διεπαφής (GUI)] (έκδοση 2006)

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

2 ο Εργαστήριο Αλληλεπίδραση και Animation

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Εργαστήριο Java. Αντικείµενο: Δίκτυα. Χειρισµός URLs. Άσκηση 1. Lab11. Πακέτο java.net

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Φύλλο Εργασίας: Παιχνίδι Λαβύρινθος (MAZE) Προγραμματιστικό Εργαλείο: GAME MAKER. Ονοματεπώνυμο:

Στην τεχνολογία των CSS, οι κανόνες στυλ (style

Σχολή Κοινωνικών Επιστημών Τμήμα Πολιτισμικής Τεχνολογίας Και Επικοινωνίας

Γ3.3.Μ7 ΕΠΑΝΆΛΗΨΗ ΜΈΡΟΣ Α: ΈΝΝΟΙΕΣ ΤΙ ΕΊΝΑΙ Η VISUAL BASIC ΤΙ ΜΠΟΡΟΎΜΕ ΝΑ ΚΆΝΟΥΜΕ ΜΕ ΤΗ VISUAL BASIC ΑΝΤΙΚΕΊΜΕΝΑ: ΦΌΡΜΑ ΚΑΙ ΧΕΙΡΙΣΤΉΡΙΑ ΕΤΙΚΈΤΑ LABEL

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Transcript:

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #8 η : Τα βασικά των γραφικών διεπαφών στη Java, συμβάντα, χειριστές συμβάντων Γαβαλάς Δαμιανός dgavalas@aegean.gr Δημιουργία αντικειμένων γραφικών διεπαφών (GUI objects) // Δημιουργία πλήκτρου με κείμενο OK JButton jbtok = new JButton("OK"); // Δημιουργία ετικέτα με κείμενο "Enter your name: " JLabel jlblname = new JLabel("Enter your name: "); Label Text field Check Box Radio Button Button // Δημιουργία πεδίου κειμένου με κείμενο "Type Name Here" JTextField jtfname = new JTextField("Type Name Here"); // Δημιουργία check box με κείμενο bold JCheckBox jchkbold = new JCheckBox("Bold"); // Δημιουργία radio button με κείμενο red JRadioButton jrbred = new JRadioButton("Red"); // Δημιουργία combo box με επιλογές red, green, and blue JComboBox jcbocolor = new JComboBox(new String[]{"Red", "Green", "Blue"}); Combo Box 1

Swing έναντι AWT Γιατί τα GUIστοιχεία (components) έχουν πρόθεμα J; ΓιατίJButton και όχι απλά Button; Η πραγματικότητα είναι ότι υπάρχει κλάση που ονομάζεται Button και ανήκει στο πακέτο java.awt. Όταν δημιουργήθηκε η Java, οι GUI κλάσεις ανήκαν σε μια βιβλιοθήκη γνωστή ως Abstract Windows Toolkit (AWT). Το AWT είναι αρκετά καλά για ανάπτυξη απλών αλλά όχι απαιτητικών γραφικών διεπαφών, ενώ είναι ευάλωτη σε λάθη καθώς εξαρτάται σε μεγάλο βαθμό από την υποκείμενη πλατφόρμα. Με τη δημοσίευση της Java 2, τα AWT GUI components αντικαταστήθηκαν από μια πιο ισχυρή και ευέλικτη βιβλιοθήκη, τα Swing components. Τα Swing components σχεδιάζονται απευθείας στον καμβά με Java κώδικα, εκτός από όσα κληρονομούν την java.awt.window ή java.awt.panel, που σχεδιάζονται χρησιμοποιώντας γηγενές GUI σε μια συγκεκριμένη πλατφόρμα. Τα Swing components εξαρτώνται λιγότερο από την υποκείμενη πλατφόρμα και χρησιμοποιούν λιγότερους γηγενείς GUI πόρους. Έτσι, τα Swing components που δε βασίζονται σε γηγενή GUI στοιχεία αναφέρονται ως ελαφριά (lightweight components) ενώ τα υπόλοιπα ως βαριά heavyweight components). Ιεραρχία GUI κλάσεων (Swing) Dimension Font LayoutManager 1 Κλάσεις στο java.awt package bαριά FontMetrics Object Color Panel Applet JApplet Graphics Component * Container Window Frame Dialog JFrame JDialog JComponent Swing Components στο ja vax.swing pa ckage eλαφρά 2

Οι Container κλάσεις Dimension Font LayoutManager 1 Κλάσεις στο java.a wt packa ge βαριά FontMetrics Object Color Panel Applet JApplet Graphics Component * Container Window Frame Di alog JFrame JDialog Container classes can contain other GUI components. JComponent JPanel Swing Components στο javax.swing package ελαφρά Οι GUI βοηθητικές κλάσεις Dimension Font LayoutManager 1 Κλάσεις στο java.awt package βαριά FontMetrics Object Color Panel Applet JApplet Graphics Component * Container Window Frame Dialog JFrame JDialog The helper classes are not subclasses of Component. They are used to describe the properties of GUI components such as graphics context, colors, fonts, and dimension. JComponent ελαφρά JPanel Swing Components στο javax.swing package 3

Τα Swing GUI Components JCheckBoxMe nuitem JMenuItem JMenu AbstractButton JButton JRadioButtonMenuItem JToggleButton JCheckBox JComponent JEditorPane JRadioButton JTextComponent JTextField JPasswordField JTextArea JLa bel JL ist JComboBox JPanel JOptionPane JScrollBar JSlide r JTabbedPa ne JSplitPane JLayeredPane JSepa rator JScrollPane JRootPane JT oo lbar JMenuBar JPopupM enu JFileChooser JColorChooser JToolTip JT ree JTable JTableHeader JInternalFrame JProgressBar JSpinner Πλαίσια (Frames) Ένα Frame είναι ένα παράθυρο το οποίο δεν περιέχετα μέσα σε κάποιο άλλο παράθυρο. Το Frame αποτελεί τη βάση που περιέχει άλλα γραφικά components σε Java GUI εφαρμογές. Η κλάση JFrame μπορεί να χρησιμοποιηθεί για να δημιουργήσει παράθυρα (Swing GUI προγράμματα). 4

Δημιουργία Frames import javax.swing.*; public class MyFrame { public static void main(string[] args) { JFrame frame = new JFrame("Test Frame"); frame.setsize(400, 300); frame.setvisible(true); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); /* Αν δεν ήταν το κύριο παράθυρο της εφαρμογής θα επιλέγαμε JFrame.HIDE_ON_CLOSE. */ } } Προσθέτοντας Components σε ένα Frame Title bar // Προσθήκη ενός πλήκτρου στο frame frame.getcontentpane().add( new JButton("OK")); Content pane 5

Κλάση JFrame javax.swing.jframe +JFrame() +JFrame(titl e: String) +getsize(width: int, height: int): void +setlocation(x: int, y: in t): void +setvisible(visible: boolean): void +setdefaultcloseoperation(mode: int): void +setlocationrelativeto (c: Component): void Δημιουργεί ένα προκαθορισμένο frame χωρί ς τίτλο. Δημιουργεί ένα frame με τον καθορισμένοτίτλο τίτλο. Ορίζει το μέγεθος του frame. Ορίζει τη θέ ση της πάνω-αριστερής γωνί ας του frame. Θέτοντας true, εμφανίζει το frame. Ορίζει τη λε ιτουργία όταν κλείσει το frame. Θέτει τη θέση του fram e σχετικά με το συγκεκριμένο component. Αν το com ponent είναι null, τοποθετεί το frame στο κέντρο της οθόνης. Διαχειριστές διάταξης (Layout Managers) Οι layout managers της Java παρέχουν ένα επίπεδο αφαίρεσης για την αυτόματη αντιστοίχιση των γραφικών διεπαφών σας σε όλα τα παραθυρικά συστήματα Τα UI components τοποθετούνται σε «δοχεία» (containers) Κάθε container έχει ένα layout manager που διευθετεί τα UI components μέσα στον container Οι layout managers ανατίθενται σε containers χρησιμοποιώντας τη μέθοδο setlayout(layoutmanager) του container 6

Είδη Layout Managers FlowLayout GridLayout BorderLayout Και πολλοί άλλοι layout managers (BoxLayout, GridBagLayout, ) FlowLayout: Παράδειγμα Διατάσσει τα components σε μια γραμμή, αρχίζοντας μια νέα όταν ο container δεν είναι αρκετά πλατύς 7

Η κλάση FlowLayout java.awt.flowlayout -alignment: int -hgap: int -vgap: int +FlowLayout() +FlowLayout(alignment: int) +FlowLayout(alignment: int, hgap: int, vgap: int) Οι get και set μέθοδοι για αυτές τις ιδιότητες παρέχονται στην κλάση Η στοίχιση του layout manager (default: CENTER) Το οριζόντιο κενό (μεταξύ των components) του layout manager (default: 5 pixels) Το κάθετο gap του layout manager (default: 5 pixels) Δημιουργεί έναν default FlowLayout manager Δημιουργεί έναν FlowLayout manager με τη συγκεκριμένη στοίχιση Δημιουργεί έναν FlowLayout manager με τη συγκεκριμένη στοίχιση, οριζόντιο και κάθετο κενό GridLayout: Παράδειγμα Κάνει όλα τα components ίσα σε μέγεθος και τα εμφανίζει σε ένα καθορισμένο αριθμό γραμμών και στηλών, με καθορισμένο οριζόντιο και κάθετο κενό 8

Ο BorderLayout Manager Χωρίζει το container σε 5 περιοχές: East, South, West, North, and Center Ορίζονται και τα οριζόντια/κάθετα κενά Τα Components προστίθενται σε ένα BorderLayout χρησιμοποιώντας τη μέθοδο add. add(component, constraint), where Π.χ. το constraint μπορεί να είναι BorderLayout.EAST GridBagLayout & GroupLayout Ο GridBagLayout είναι ένας εξελιγμένος, ευέλικτος layout manager. Στοιχίζει τα components τοποθετώντας τα σε ένα πλέγμα κελιών, επιτρέποντας σε components να εκτείνονται σε περισσότερα από ένα κελιά. Οι γραμμές/στήλες μπορούν να έχουν διαφορετικά ύψη/πλάτη. ΟGroupLayout layout manager αναπτύχθηκε για να χρησιμοποιείται από εργαλεία ανάπτυξης GUIs (GUI builder tools), αλλά μπορεί να χρησιμοποιηθεί και χειροκίνητα. Ο GroupLayout δουλεύει με οριζόντιες και κάθετες διατάξεις ξεχωριστά. Η layout ορίζεται για κάθε σιάσταση ανεξάρτητα. 9

Η κλάση Color Μπορείτε να ορίσετε χρήματα για τα GUI components χρησιμοποιώντας την κλάση java.awt.color. Τα χρώματα ακολουθούν το RGB (red green blue) μοντέλο Κάθε μία από τις χρωματικές συνιστώσες αναπαρίσταται από μια τιμή byte που περιγράφει την ένταση της συνιστώσας: από 0 (η πιο σκούρα απόχρωση) έως 255 (η πιο ελαφριά απόχρωση) Color c = new Color(r, g, b); Παράδειγμα: Color c = new Color(228, 100, 255); Παράδειγμα χρήσης standard χρωμάτων (κλήση διαφορετικού κατασκευαστή): Color c = new Color(Color.BLACK); Ορίζοντας χρώματα Μπορείτε να χρησιμοποιήσετε τις ακόλουθες μεθόδους για να ορίσετε το χρώμα προσκηνίου/παρασκηνίου ενός component: setbackground(color c) setforeground(color c) Παράδειγμα: Jbutton btnok = new Jbutton("OK"); frame.getcontentpane().add(btnok); btnok.setbackground(color.yellow); btnok.setforeground(color.red); 10

H κλάση Font SansSerif, Serif, Monospaced, Dialog, DialogInput, Font.PLAIN, Font.ITALIC, + Font.ITALIC Font.BOLD, Font.BOLD Font myfont = new Font(name, style, size); Παράδειγμα: Font myfont = new Font("SansSerif", Font.BOLD, 16); Font myfont = new Font("Serif", Font.BOLD + Font.ITALIC, 12); JButton btnok = new JButton("OK ); btnok.setfont(myfont); Εύρεση όλων των διαθέσιμων ονομάτων γραμματοσειρών GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontnames = e.getavailablefontfamilynames(); for (int i = 0; i < fontnames.length; i++) System.out.println(fontnames[i]); 11

Χρησιμοποιώντας Panels ως υπο-δοχεία Τα panels λειτουργούν ως υπο δοχεία (sub containers) για την ομαδοποίηση μέρους των GUI components. Συστήνεται να τοποθετείτε τα GUI components σε panels και σε δεύτερο χρόνο να τοποθετείτε panels σε ένα frame Αυτό δίνει το πλεονέκτημα να χρησιμοποιείς διαφορετικό layout manager σε κάθε panel Μπορείτε επίσης να τοποθετείτε panels σε ένα panel Για να προσθέσετε ένα component σε ένα JFrame, το προσθέτετε στο content pane του JFrame myframe.getcontentpane().add(new JButton("OK")); Για να προσθέσετε ένα component σε ένα panel, το προσθέτετε άμεσα χρησιμοποιώντας τη μέθοδο add mypanel.add(new JButton("OK")); Δημιουργία ενός JPanel Χρησιμοποιείτε τον κατασκευαστή new JPanel() για να δημιουργήσετε ένα panel με τον default FlowLayout manager ή new JPanel(LayoutManager) για να δημιουργήσετε ένα panel με καθορισμένο layout manager. Χρησιμοποιείτε τη μέθοδο add(component) για να προσθέσετε ένα component στο panel, π.χ.: JPanel p = new JPanel(); p.add(new JButton("OK")); 12

Άσκηση με panels για το σπίτι Αυτό το παράδειγμα χρησιμοποιεί panels για να οργανώσει τη διάταξη components Το πρόγραμμα δημιουργεί ένα GUI για έναν φούρνο μικροκυμάτων Στο frame εισάγονται ένα button και ένα panel (p1) Στο panel p1 εισάγονται ένα textfield και ένα εσωτερικό panel (p2) Στο panel p2 εισάγονται 12 buttons A button A textfield 12 buttons P2 P1 frame Περιγράμματα (Borders) Μπορείτε να ορίσετε το περίγραμμα ενός αντικειμένου της κλάσης JComponent. Η βιβλιοθήκη Swing διαθέτει διάφορους τύπους περιγραμμάτων, π.χ. επιτιτλισμένο περίγραμμα (titled border): new TitledBorder (String title). Περίγραμμα γραμμής (line border): new LineBorde r(color color, int width), όπου το width ορίζει το πάχος του περιγράμματος Παράδειγμα: προσθήκη ενός titled border σε ένα panel: JPanel panel = new JPanel(); panel.setborder(new TitleBorder( My Panel )); 13

Image Icons Η Java χρησιμοποιεί την κλάση javax.swing.imageicon για να αναπαραστήσει μια εικόνα Τυπικά πρόκειται για αρχεία γραφικών που χρησιμοποιούνται για να διακοσμηθούν components Παράδειγμα: ImageIcon icon = createimageicon("images/middle.gif", "a pretty image"); lbl = new JLabel("Image and Text", icon, JLabel.CENTER); (Event driven programming) 14

Διαδικαστικός προγραμματισμός έναντι προγραμματισμού καθοδηγούμενου από συμβάντα Στο διαδικαστικό προγραμματισμό μ (procedural programming) ο κώδικας εκτελείται με μια διαδικαστική σειρά. Στον προγραμματισμό καθοδηγούμενο από συμβάντα (event driven programming) ο κώδικας εκτελείται ενεργοποιούμενος από συμβάντα. Συμβάντα (Events) Ένα συμβάν μπορεί να οριστεί ως ένα είδος ειδοποίησης/σήματος του προγράμματος ότι κάτι έχει συμβεί Το συμβάν δημιουργείται από εξωτερικές δραστηριότητες του χρήστη όπως κινήσεις του ποντικιού, και πάτημα πλήκτρων του πληκτρολογίου, ή από το λειτουργικό σύστημα, όπως ένα χρονόμετρο (timer) 15

Κλάσεις συμβάντων ActionEvent AdjustmentEvent ContainerEvent FocusEvent MouseEvent EventObject AWTEvent ComponentEvent InputEvent ItemEvent TextEvent PaintEvent WindowEvent KeyEvent ListSelectionEvent Πληροφορία συμβάντος Ένα αντικείμενο συμβάντος (event object) περιέχει όποιες ιδιότητες σχετίζονται με το συμβάν. Μπορείτε να προσδιορίσετε το πηγαίο αντικείμενο του συμβάντος χρησιμοποιώντας τη μέθοδο getsource() της κλάσης EventObject. Οι υποκλάσεις της EventObject σχετίζονται με ειδικούς τύπους συμβάντων, όπως δράσεις πλήκτρων, συμβάντα παραθύρων, συμβάντα components, κινήσεις ποντικιού και πατήματα πλήκτρων. 16

Επιλεγμένες δραστηριότητες χρήστη Πηγαίο Τύπος συμβάντος Δραστηριότητα χρήστη Component που πυροδοτείται Κλικ σε ένα πλήκτρο JButton ActionEvent Κλικ σε ένα check box JCheckBox ItemEvent, ActionEvent Κλικ σε ένα radio button JRadioButton ItemEvent, ActionEvent Πάτημα <Enter> σε ένα text field JTextField ActionEvent Επιλογή ενός άλλου στοιχείου JComboBox ItemEvent,ActionEvent Άνοιγμα/κλείσιμο παραθύρου Window WindowEvent Πάτημα/ελευθέρωση ποντικιού Component MouseEvent Πάτημα/ελευθέρωση πλήκτρου Component KeyEvent To μοντέλο ανάθεσης συμβάντων (event delegation model) στη Java Η μοντέρνα πρακτική χειρισμού συμβάντων στη Java και σε αρκετές άλλες γλώσσες βασίζεται στην έννοια της πηγής του συμβάντος (Event Source) ) και των ακροατών συμβάντων (Event Listeners). Κάθε αντικείμενο που ενδιαφέρεται να ενημερωθεί για συμβάντα ονομάζεται ακροατής συμβάντων. Κάθε αντικείμενο που δημιουργεί (πυροδοτεί) τέτοια συμβάντα ονομάζεται πηγή του συμβάντος (ή πηγαίο component) Ποιοι συμμετέχουν στo μοντέλο ανάθεσης συμβάντων: Πηγή συμβάντος: αντικείμενο που εκπέμπει συμβάντα Ακροατές συμβάντων: αντικείμενα που λαμβάνουν ενημερώσεις για συμβάντα Αντικείμενα συμβάντων (event objects): αντικείμενα που περιγράφουν το συμβάν 17

To μοντέλο ανάθεσης συμβάντων (event delegation model) στη Java To μοντέλο ανάθεσης συμβάντων ορίζει μηχανισμούς για τη δημιουργία και επεξεργασία συμβάντων. Η γενική αρχή είναι αρκετά απλή: Ένα ακροατής καταχωρείται ως τέτοιος (καταγράφει δηλαδή το ενδιαφέρον του για να λάβει ειδοποιήσεις) σε μια πηγή συμβάντων Μια πηγή δημιουργεί ένα συμβάν και το στέλνει σε έναν ή περισσότερους ακροατές Σε αυτό το σχήμα, ο ακροατής απλά περιμένει μέχρι να λάβει κάποια ειδοποίηση για συμβάν Το πλεονέκτημα της μεθόδου ότι ο κώδικας (application logic) που επεξεργάζεται τα συμβάντα διαχωρίζεται καθαρά από τη γραφική διεπαφή (GUI logic) που δημιουργεί τέτοια συμβάντα Ένα γραφικό component μπορεί να «αναθέσει» ("delegate") την επεξεργασία ενός συμβάντος σε ένα ξεχωριστό κομμάτι κώδικα To μοντέλο ανάθεσης συμβάντων (event delegation model) στη Java Διαδικασία που ακολουθείται: 1. Ένα συμβάν συμβαίνει (π.χ., mouse click, τέλος ενός παιχνιδιού, νέος χρήστης μπαίνει στο chat, ht κλπ) ) 2. Η πηγή του συμβάντος στέλνει το συμβάν καλώντας τη συμφωνημένη μέθοδο σε όλους τους ακροατές συμβάντων 3. Ένα αντικείμενο συμβάντος (event object ) περνιέται ως παράμετρος στη συμφωνημένη μέθοδο 4. Οι ακροατές συμβάντων αντιδρούν κατάλληλα (π.χ., στέλνουν τα στοιχεία μιας φόρμας, εμφανίζουν μια game over οθόνη, εμφανίζουν ένα μήνυμα καλωσορίσματος στο νέο χρήστη του chat, κλπ) 18

To μοντέλο ανάθεσης (Delegation Model) Δράση χρή στη Πυροδότηση ενός συμβάντος source: SourceClass +addxlistener(listener: XListener) XLi stener +handler(event: ( XEvent ) (α) Ένα γενικό component από το οποίο πηγάζουν συμβάντα με ένα γενικό ακροατή Εγγραφή καλώντας τη μέθοδο source.addxlistener(listener); listener: ListenerClass source: JButton +addactionlistener(listener: ActionListener) ActionListener +actionperformed(event: ActionEvent) (β) Ένα JButton πηγαίο component με ένα ActionListener Εγγραφή με κλήση της μεθόδου source.addactionlistener(listener); listener: CustomListenerClass Εσωτερική λειτουργία ενός πηγαίου component πηγή: SourceClass πηγή: JButton +addxlistener(xli stener listener) Ένα συμβάν πυροδοτείται Κράτα το σε μια λίστα +addactionlistener(actionlistener listener) Ένα συμβάν πυροδοτείται Κράτα το σε μια λίστα event: XEvent Κά λεσε listener1.handler(event) listener2.handler(event) listenern.handler(event) listener1 listener2 listenern event: Act ionevent Κάλεσε listener1.actionperformed(event) listener2.actionperformed(event) listenern.actionperformed(event) listener1 listener2 listenern (α) Εσωτερική λειτουργία ενός γενικού πηγαίου αντικειμένου (β) Εσωτερική λειτουργία ενός γενικού JButton αντικειμένου 19

To μοντέλο ανάθεσης (delegation model): παράδειγμα Το αντικείμενο btnok θα είναι η πηγή συμβάντων (τα συμβάντα θα είναι clicks πάνω στο πλήκτρο) JButton btnok = new JButton("OK"); btnοκ.addactionlistener(new java.awt.event.actionlistener() { }); Η πηγή συμβάντων (btnok) καταγράφει ένα νέο ακροατή (τον οποίο θα ενημερώνει για τα ActionEvent) public void actionperformed (java.awt.event.actionevent evt) { } System.out.println( Με πάτησαν!!!! ); Ο «μπλε κώδικας» είναι πρακτικά μια ανώνυμη εσωτερική κλάση (inner class) χωρίς όνομα που υλοποιεί τον ακροατή του συμβάντος ActionEvent που τυχόν θα παράγει η πηγή συμβάντων btnok Επιλεγμένοι χειριστές συμβάντων (Event Handlers) Κλάση συμβάντος Διεπαφή ακροατή Μέθοδοι Ακροτατή (Χειριστές) ActionEvent ActionListener actionperformed(actionevent) ItemEvent ItemListener itemstatechanged(itemevent) WindowEvent WindowListener windowclosing(windowevent) windowopened(windowevent) windowiconified(windowevent) windowdeiconified(windowevent) windowclosed(windowevent) windowactivated(windowevent) windowdeactivated(windowevent) ContainerEvent ContainerListener componentadded(containerevent) componentremoved(containerevent) MouseEvent ent MouseListener mousepressed(mouseevent) see ent) mousereleased(mouseevent) mouseclicked(mouseevent) mouseexited(mouseevent) mouseentered(mouseevent) KeyEvent KeyListener keypressed(keyevent) keyreleased(keyevent) keytypeed(keyevent) 20

java.awt.event.actionevent java.util.eventobject +getsource(): Object Επιστρέφει τα αντικείμενο στο οποίο συνέβη το συμβάν java.awt.event.awtevent java.awt.event.actionevent +getactioncommand(): String +getmodifiers(): int +getwhen(): long Επιστρέφει τη συμβολοσειρά εντολής (command string) που σχετί ζεται με αυτή τη δράση. Για ένα πλήκτρο, το κείμενό του είναι η συμβολοσειρά εντολής. Επιστρέφει τα πλήκτρα που είναι πατημένα κατά τη διάρκεια της δράσης συμβάντος Επιστρέφει τη χρονική στιγμή (ti mes tamp ) που συνέβη το συμβάν (αριθμός milliseconds από την January 1, 1970) Εσωτερικές κλάσεις (inner classes) ακροατών Μια κλάση ακροατή σχεδιάζεται ειδικά για να δημιουργεί ένα αντικείμενο ακροατή για ένα GUI component (π.χ., έναν ακροατή για ένα πλήκτρο) Καθώς αυτή η κλάση δεν χρησιμοποιείται από άλλες εφαρμογές, είναι καλή ιδέα η κλάση ακροατή να οριστεί ως εσωτερική κλάση (inner class) στην κλάση του frame 21

Εσωτερικές κλάσεις (Inner Classes) Εσωτερική κλάση: μια κλάση που αποτελεί μέλος μιας άλλης κλάσης Πλεονεκτήματα: Σε κάποιες εφαρμογές, οι χρήση εσωτερικών κλάσεων απλουστεύουν την υλοποίηση Μια εσωτερική κλάση μπορεί να χρησιμοποιήσει οιή τις ιδιότητες και μεθόδους που ορίζονται στην εξωτερική κλάση που την εσωκλείει, άρα δεν χρειάζεται να περάσετε αναφορά της εξωτερικής κλάσης στον κατασκευαστή της εσωτερικής Εσωτερικές κλάσεις public class Test {... } public class A {... } (α) public class Test {... // εσωτερική κλάση public class A {... } } (β) // OuterClass.java: παράδειγμα εσωτερικής κλάσης public class OuterClass { private int data; } /** μια μέθοδος της εξωτερικής κλάσης */ public void m() { // Do something } // μια εσωτερική κλάση class InnerClass { /** μια μέθοδος της εσωτερικής κλάσης */ public void mi() { // άμεση προσπέλαση στις ιδιότητες/μεθόδους // που ορίζονται στην εξωτερική της κλάση data++; m(); } } (γ) 22

Αλληλεπίδραση μεταξύ πηγής και ακροατή συμβάντος 1. To btnok καταγράφει ως ακροατή του btnlistener καλώντας τη μέθοδο addactionlistener(btnlistner). 2. To btncancel καταγράφει ως ακροατή του btnlistener καλώντας τη μέθοδο addactionlistener(btnlistner). 3. To btnok καλεί τη μέθοδο actionperformed του btnlistener για να επεξεργαστεί ένα ActionEvent. 4. To btncancel καλεί τη μέθοδο actionperformed του btnlistener για να επεξεργαστεί ένα ActionEvent. : TestActionEvent jbtok: JButton jbtcancel: JButton btlistener: ButtonListener 1. addactionlistener 2. addactionlistener 3. actionperformed 4. actionperformed MouseEvent java.awt.event.inputevent +getwhen(): long +isalt Down(): boolean +iscontroldown(): boolean +ismetadown(): boolean +isshiftdown (): boolean java.awt.event.mouseevent +getbutton(): int +getclickcount(): int +getpoint(): java.awt.poin t +getx(): int +gety(): int Επιστρέφει τη χρονική στιγμή που συνέβη το συμβ άν Επιστρέφει κατά πόσο το Al t είναι πατημένο Επιστρέφει κατά πόσο το Control είναι πατημένο Επιστρέφει κατά πόσο το Meta είναι πατημένο Επιστρέφει κατά πόσο το Shift είναι πατημένο Δείχνει ποιο mouse button έχει πατηθεί Δείχνει τον αριθμό των mouse clicks Επιστρέφει ένα αντικείμενο Point που περιέχει τις x και y συντεταγμ Επιστρέφει τη x-συντεταγμένη του σημεί ου του mouse Επιστρέφει τη y- σ υντεταγμένη του σημείου του mouse 23

Χειρισμός Mouse συμβάντων java.awt.event.mousel istener +mousepressed(e: MouseEvent): void +mousereleased(e: MouseEvent): vo id +mouseclicked(e: MouseEvent): void +mouseentered(e: MouseEvent): void +mouseexited(e: MouseEvent): void java.awt.event.mousemotionlistener +mousedragged(e: MouseEvent): void +mousemoved(e: MouseEvent): void Καλείται όταν το mouse button έχει πατηθεί πάνω από το πηγαίο component Καλείται όταν το mouse button έχει απελευθερωθεί πάνω από το πηγαίο component Καλείται όταν έχει γίνει mouse κλικ (πάτημα + α πελευθέρωση) πάνω από το πηγαίο com ponent Καλείται όταν το mouse ει σέρχεται στο πηγαίο component Καλείται όταν το mouse εξέρχεται από το πηγαίο component Καλείται όταν το mouse μετακινείται με πατημένο πλήκτρο Καλείται όταν το mouse μετακινείται χωρίς να πατηθεί πλήκτρο Ασκήσεις με συμβάντα ποντικιού για το σπίτι 1. Δημιουργήστε ένα πρόγραμμα που εμφανίζει ένα μήνυμα σε ένα panel. Χρησιμοποιήστε το mouse για να μετακινήσετε (drag) το μήνυμα 2. Δημιουργήστε ένα πρόγραμμα που ζωγραφίζει χρησιμοποιώντας το ποντίκι Το ποντίκι θα αφήνει μια γραμμή ίχνος πίσω του όταν είναι πατημένο το αριστερό πλήκτρο 24

Χειρισμός συμβάντων πληκτρολογίου Για την επεξεργασία ενός συμβάντος πληκτρολογίου χρησιμοποιούνται οι ακόλουθοι χειριστές της διεπαφής KeyListener: keypressed(keyevent e) Καλείται όταν έχει πατηθεί ένα πλήκτρο keyreleased(keyevent e) Καλείται όταν έχει ελευθερωθεί ένα πλήκτρο keytyped(keyevent e) Καλείται όταν έχει πατηθεί και εν συνεχεία ελευθερωθεί ένα πλήκτρο Η κλάση KeyEvent Μέθοδοι: getkeychar() Επιστρέφει το χαρακτήρα (πλήκτρο) που πυροδότησε το συμβάν getkeycode() Επιστρέφει τον ακέραιο keycode του χαρακτήρα (πλήκτρου) που πυροδότησε το συμβάν Πλήκτρα: Home End Page Up Page Down κλπ... VK_HOME VK_END VK_PGUP VK_PGDN 25

Ασκήσεις με συμβάντα πληκτρολογίου για το σπίτι Εμφάνιση του τελευταίου χαρακτήρα ενός πλήκτρου που πάτησε ο χρήστης Ο χρήστης μπορεί να μετακινήσει το χαρακτήρα πάνωμ κάτω, δεξιά και αριστερά χρησιμοποιώντας τα arrow keys («βελάκια») Η κλάση Timer Κάποια μη γραφικά components μπορούν να πυροδοτήσουν events Η κλάση javax.swing.timer είναι μια πηγή συμβάντων που πυροδοτεί ένα ActionEvent σε προκαθορισμένο ρυθμό javax.swing.timer +Timer(delay: int, listener: ActionListener) +addactionlistener(listener: Acti on Li stener): void +start(): void +st op (): void +setdelay(delay: in t): void Δημιουργεί έναν Ti mer με προκαθορισμένη καθυστέρηση σε milliseconds και έναν Acti onli sten er Προσθέτει έναν Acti onli sten er στον timer Αρχίζει αυτόν τον timer Σταματάει αυτόν τον timer Θέτει μια νέα τιμή καθυστέρησης για αυτόν τον timer Η κλάση Timer μπορεί να χρησιμοποιηθεί για να ελέγξει animations Π.χ., για την εμφάνιση ενός κινούμενου μηνύματος 26

Άσκηση για το σπίτι: ένα ψηφιακό ρολόι Χρησιμοποιήστε την κλάση javax.swing.timer για να εμφανίσετε την τρέχουσα ώρα σε ένα JFrame (σε μορφή hh:mm:ss) Η ώρα θα πρέπει να ανανεώνεται κάθε 1 sec δίνοντας την εντύπωση ενός ρολογιού που «τρέχει» Ως επέκταση της προηγούμενης υλοποίησης, κάντε την ώρα να εμφανίζεται ως «κυλιόμενο» κείμενο (δηλαδή να δημιουργεί μια ψευδαίσθηση μετατόπισης προς τα αριστερά) Όταν το μήνυμα «βγει» εκτός frame, θα πρέπει να το ξαναεμφανίσετε από δεξιά 27