Μάθετε την Γλώσσα Προγραμματισμού Java
Παράδειγμα
1 - Η Πρώτη Εφαρμογή σε Java Εισαγωγή Η γλώσσα προγραμματισμού Java είναι από τις δημοφιλέστερες στο είδος της και μπορεί να χρησιμοποιηθεί τόσο για αυτόνομες εφαρμογές όσο και για εφαρμογές που εκτελούνται αποκλειστικά στο Web και αποκαλούνται μικροεφαρμογές (applets). Τα πηγαία αρχεία (προγράμματα) της Java μπορούμε να τα γράψουμε μ' έναν απλό επεξεργαστή κειμένου, όπως είναι το Σημειωματάριο (Notepad) των Windows, και πρέπει να έχουν την επέκταση .java. Η επόμενη διαδικασία είναι να μεταγλωττίσουμε (compile) το πρόγραμμα από τη γραμμή εντολών του Ms-Dos με την εντολή javac prog01.java για να δημιουργηθεί το αρχείο prog01.class, το οποίο μπορεί να χρησιμοποιηθεί ανεξάρτητα από λειτουργικό σύστημα (πλατφόρμα), δηλ. το ίδιο και σε Windows και σε Macintosh και σε Unix και σε Linux. Για να εκτελέσουμε ένα μεταγλωττισμένο πρόγραμμα της Java πρέπει να χρησιμοποιήσουμε έναν διερμηνευτή (interpreter) ή μια εικονική μηχανή της Java (JVM, Java Virtual Machine), όπως αποκαλείται. Αν πρόκειται για απλή εφαρμογή της Java, μπορούμε να την εκτελέσουμε από τη γραμμή εντολών του Ms-Dos με την εντολή java prog01, ενώ αν πρόκειται για μικροεφαρμογή (applet), θα πρέπει να χρησιμοποιήσουμε τις ετικέτες (tags) <applet> και </applet> για να προσδιορίσουμε το μεταγλωττισμένο αρχείο της Java που θα εκτελεσθεί καθώς και το πλάτος (width) και το ύψος (height) του παραθύρου όπου θα εκτελεσθεί η μικροεφαρμογή μέσα στην ιστοσελίδα. Ενας εναλλακτικός τρόπος εμφάνισης των applets είναι να χρησιμοποιήσουμε την εντολή appletviewer prog01.html από τη γραμμή εντολών του Ms-Dos, όπου prog01.html είναι η ιστοσελίδα που περιέχει το applet. Παράδειγμα 1 - Η Πρώτη Εφαρμογή σε Java       Ακολουθεί η πρώτη εφαρμογή σε Java. /* Παράδειγμα 1 */ /** Είναι η εφαρμογή Hello Florina */ class HelloFlorina { public static void main (String[ ] arguments) { System.out.println("Hello from Florina"); // Η πρώτη μας εφαρμογή σε Java } } Η εντολή class ορίζει το όνομα μιας τάξης (κλάσης, class), που εδώ είναι το HelloFlorina και πρέπει να είναι υποχρεωτικά το ίδιο και με τα ίδια πεζά και κεφαλαία γράμματα με το όνομα του πηγαίου αρχείου (προγράμματος) της Java, δηλ. HelloFlorina.java. Η συνάρτηση main() πρέπει να υπάρχει υποχρεωτικά σε κάθε απλή εφαρμογή (όχι μικροεφαρμογή) της Java και είναι η πρώτη εντολή που αναζητά η Java κατά την μεταγλώττιση και εκτέλεση της εφαρμογής. Με τις αγκύλες { και }, μπορούμε να χωρίσουμε τον κώδικα του προγράμματος σε λογικές ενότητες (blocks). Για σχόλια (comments) μίας γραμμής, μπορούμε να χρησιμοποιήσουμε τους χαρακτήρες //, ενώ για σχόλια πολλών γραμμών τους χαρακτήρες /* ή /** για την αρχή του σχολίου και τους χαρακτήρες */ για το τέλος του σχολίου. Οι χαρακτήρες /** και */ αποτελούν ένα σχόλιο τεκμηρίωσης (documentation comment), που το χρησιμοποιεί το εργαλείο (tool) javadoc όταν ετοιμάζει την αυτόματη δημιουργία τεκμηρίωσης (documentation). Αν μεταγλωττίσουμε και εκτελέσουμε με επιτυχία το παραπάνω πρόγραμμα, θα πρέπει να δούμε στην οθόνη το εξής μήνυμα : Hello from Florina Παράδειγμα 2 - Η Πρώτη Μικροεφαρμογή (Applet) σε Java       Ακολουθεί η πρώτη μικροεφαρμογή σε Java. /* Παράδειγμα 2 */ /** Είναι η μικροεφαρμογή Hello Florina */ public class prog02 extends java.applet.Applet { int baros = 0; public void init() { baros = 100; } public void paint(java.awt.Graphics g) { g.drawString("Το βάρος μου είναι : " + baros + " κιλά", 10, 20); } } Σ' αυτό το πρόγραμμα έχουμε δηλώσει μια μεταβλητή με όνομα baros, που είναι ακέραιος (integer), και η έξοδός μας αποτελείται από ενωμένα strings και την τιμή της μεταβλητής baros. Η μέθοδος init() καλείται μόνο μία φορά όταν εκτελείται το applet και χρησιμοποιείται για να ορίσει μεταβλητές που χρειάζονται στο applet. Η μέθοδος paint() είναι υποχρεωτική σε κάθε applet και χρησιμοποιείται για να μπορούμε να εμφανίζουμε ο,τιδήποτε θέλουμε σ' ένα applet. Χρησιμοποιεί ένα όρισμα (argument), το οποίο είναι το αντικείμενο Graphics του πακέτου java.awt, που εδώ το ονομάσαμε g. Με την εντολή (συνάρτηση ή μέθοδο) drawString(), που ανήκει στο αντικείμενο Graphics, μπορούμε να εμφανίσουμε ένα μήνυμα στην οθόνη σε συγκεκριμένο σημείο x=10 και y=20, όπου η θέση 0, 0 είναι η πάνω αριστερή γωνία του παραθύρου εμφάνισης του applet μέσα στην ιστοσελίδα. Παράδειγμα 3 - Μεταβλητές και Strings       Για να δηλώσουμε μεταβλητές στην Java και να δώσουμε και αρχικές τιμές, μπορούμε να γράψουμε τα εξής : int a; float p; float weight = 90; char initial = 'A'; String name = "George"; boolean married = true; Παράδειγμα 4 - Εργασίες με Strings      
Ακολουθούν παραδείγματα : /* Παράδειγμα 4 */ /** Εργασίες με Strings */ class StrWorks { public static void main (String[ ] arguments) { String firstName = "John"; String secondName = "Anna"; System.out.println("Είναι τα ονόματα ίδια; " + firstName.equals(secondName)); System.out.println("Το πρώτο όνομα έχει " + firstName.length() + " γράμματα"); System.out.println("Το πρώτο όνομα με κεφαλαία : " + firstName.toUpperCase()); System.out.println("Το δεύτερο όνομα με πεζά : " + secondName.toLowerCase()); } } Παράδειγμα 5 - Η Εντολή If       Η εντολή if μπορεί να πάρει τις εξής μορφές στην Java : int balance = -1; if (balance < 0) System.out.println("Ο Λογαριασμός σας δεν έχει αντίκρυσμα");
int balance = 3; if (balance < 0) System.out.println("Ο Λογαριασμός σας δεν έχει αντίκρυσμα"); else System.out.println("Τα διαθέσιμα κονδύλια είναι : " + balance);
int balance = 0; if (balance < 0) System.out.println("Ο Λογαριασμός σας δεν έχει αντίκρυσμα"); else if (balance = = 0) System.out.println("Δεν υπάρχουν κονδύλια στον Λογαριασμός σας"); else System.out.println("Τα διαθέσιμα κονδύλια είναι : " + balance); Παράδειγμα 6 - Η Εντολή Switch       Εκτός από τις φωλιασμένες εντολές if-else, ένας άλλος τρόπος για να ελέγξουμε πολλές διαφορετικές καταστάσεις είναι να χρησιμοποιήσουμε την εντολή switch. /* Παράδειγμα 6 */ /** Η Εντολή Switch */ class Months { public static void main (String[ ] arguments) { int month = 0; if (argument.length > 0) month = Integer.parseInt(arguments[0]); switch (month) { case (1): System.out.println("Ιανουάριος"); break; case (2): System.out.println("Φεβρουάριος"); break; case (3): System.out.println("Μάρτιος"); break; ... default: System.out.println("Μάρτιος"); } } } Παράδειγμα 7 - Η Εντολή For       Ο βρόχος (loop) for ζητάει από τον υπολογιστή να εκτελέσει μια συγκεκριμένη εργασία έναν ορισμένο αριθμό φορών. /* Η Εντολή For */ class Numbers01 { public static void main(String[ ] arguments) { for (int number = 0; number < 100; number++) { System.out.println("Αριθμός : " + number + "."); } } } Παράδειγμα 8 - Η Εντολή While       Ο βρόχος while ελέγχει μια συνθήκη και αν αυτή είναι αληθής (true), επαναλαμβάνει μια ομάδα εντολών. /* Η Εντολή While */ class Numbers02 { public static void main(String[ ] arguments) { int number = 0; while (number < 100) { System.out.println("Αριθμός : " + number + "."); number++; } } } Παράδειγμα 9 - Η Εντολή Do ... While       Ο βρόχος do ... while εκτελεί μια ομάδα εντολών μία φορά τουλάχιστον και μετά ελέγχει μια συνθήκη και αν αυτή είναι αληθής (true), τότε επαναλαμβάνει την ομάδα εντολών. /* Η Εντολή Do ... While */ class Numbers03 { public static void main(String[ ] arguments) { int number = 0; do { System.out.println("Αριθμός : " + number + "."); number++; } while (number < 100); } } Παράδειγμα 10 - Η Εντολή Break       Για να βγούμε από έναν βρόχο, ο κανονικός τρόπος είναι να γίνει ψευδής (false) η συνθήκη ελέγχου του βρόχου, υπάρχουν όμως περιπτώσεις που θέλουμε να βγούμε νωρίτερα από τον βρόχο και προς τον σκοπό αυτό χρησιμοποιούμε την εντολή break. /* Η Εντολή Break */ class Numbers04 { public static void main(String[ ] arguments) { int number = 0; do { number++; System.out.println("Αριθμός : " + number + "."); if (number = = 50) break; } while (number < 100); } } Παράδειγμα 11 - Οι Πίνακες (Arrays) στην Java       Μπορούμε να δημιουργήσουμε πίνακες (arrays) γι' όλα τα είδη των πληροφοριών που μπορούν να αποθηκευθούν σαν μεταβλητές, ως εξής : String[ ] babyName; int[ ] babyAge; boolean[ ] babyWeight; Οι παραπάνω εντολές δημιούργησαν τρεις πίνακες αλλά δεν έχει αποθηκευθεί ακόμα τίποτα μέσα τους. Για να γίνει αυτό, πρέπει να χρησιμοποιήσουμε την εντολή (τελεστή) new και να καθορίσουμε πόσα στοιχεία θα έχει ο πίνακας, ως εξής : String[ ] babyName = new String[40]; Μπορούμε να εκχωρήσουμε και τιμές μαζί με την δήλωση ενός πίνακα, ως εξής : int[ ] babyAge = {2, 5, 4, 3, 1}; Οι τιμές που θα καταχωρηθούν στον πίνακα βρίσκονται ανάμεσα στους χαρακτήρες { και } και χωρίζονται με κόμματα. Ακόμη, όλα τα στοιχεία του πίνακα πρέπει να είναι του ίδιου τύπου και δεν καθορίζουμε τον αριθμό τους. Τα στοιχεία ενός πίνακα αριθμούνται από το 0 έως το n-1, όπου το n είναι το πλήθος των στοιχείων του πίνακα. Για να βρούμε το πλήθος των στοιχείων ενός πίνακα, μπορούμε να χρησιμοποιήσουμε την ιδιότητα length, ως εξής : int[ ] babyAge = {2, 5, 4, 3, 1}; System.out.println("Υπάρχουν " + babyAge.length + " μωρά"); String[ ] Names = {"Anna", "Georgia", "Maria", "Alexia"}; for (int count = 0; count < Names.length; count++) { System.out.println("Ονομα : " + Names[count]); } Για να δημιουργήσουμε έναν πίνακα δύο διαστάσεων, δίνουμε την εξής εντολή : String[ ] babyDetail = new String[5][5]; Παράδειγμα 12 - Τα Αντικείμενα (Objects)       Το κάθε πρόγραμμα της Java που δημιουργούμε μπορεί να θεωρηθεί σαν ένα αντικείμενο (object), όπως ο,τιδήποτε άλλο στον αληθινό κόσμο, όπως δηλαδή ένα αυτοκίνητο, ένα ποδήλατο, μια μηχανή ή και οι ίδιοι οι άνθρωποι. Οι άνθρωποι έχουν ένα κεφάλι, δύο χέρια, δύο πόδια κ.ά., ενώ το κάθε μέρος του σώματος μπορεί να κάνει συγκεκριμένες εργασίες και αποτελείται από πράγματα που το διαφοροποιούν από το υπόλοιπο σώμα. Αν διασπάσουμε τα προγράμματα της Java με τον ίδιο τρόπο, τότε μπορούμε να μιλήσουμε για Προσανατολισμένο σε Αντικείμενα Προγραμματισμό (Object Oriented Programming ή OOP). Ένα αντικείμενο (object) περιέχει δύο πράγματα : ιδιότητες (attributes) και συμπεριφορά (behavior) ή μεθόδους (methods). Οι ιδιότητες περιγράφουν το αντικείμενο ενώ οι μέθοδοι περιγράφουν το τι μπορεί να κάνει το αντικείμενο. Στην Java δημιουργούμε ένα αντικείμενο χρησιμοποιώντας μια τάξη (class) σαν ένα πρότυπο (template). Η τάξη είναι ένα βασικό αντίγραφο (master copy) του αντικειμένου που καθορίζει ποιες ιδιότητες και συμπεριφορά πρέπει να έχει ένα αντικείμενο. Το κάθε πρόγραμμα σε Java που δημιουργούμε θα αποτελεί μια τάξη (class) επειδή το καθένα έχει χρησιμοποιήσει ένα πρότυπο (template) για την δημιουργία νέων αντικειμένων. Οπως είδαμε ήδη, τα αντικείμενα δημιουργούνται χρησιμοποιώντας μια τάξη αντικειμένων σαν οδηγό ή πρότυπο, ως εξής : public class dog { String name; public void speak() { System.out.println("γαβ γαβ"); } } Το πρώτο τμήμα της τάξης dog δημιουργεί μια μεταβλητή string με όνομα name, που αποτελεί μια ιδιότητα ή χαρακτηριστικό (attribute) του αντικειμένου και είναι αυτό που ξεχωρίζει το ένα αντικείμενο dog από το άλλο. Το δεύτερο τμήμα της τάξης dog είναι μια μέθοδος (method) ή συμπεριφορά (behavior) ή συνάρτηση (function) με όνομα speak() και η οποία περιέχει μία μόνο εντολή για την εμφάνιση ενός μηνύματος. Αν θέλουμε τώρα να δημιουργήσουμε ένα αντικείμενο dog σ' ένα πρόγραμμα, μπορούμε να χρησιμοποιήσουμε την εξής εντολή : dog myDog = new dog(); Μπορούμε να δώσουμε τιμή στην μεταβλητή name του αντικειμένου myDog : myDog.name = "Azor"; Μπορούμε να καλέσουμε την μέθοδο speak() του αντικειμένου myDog : myDog.speak(); οπότε θα εμφανισθεί το μήνυμα "γαβ γαβ" στην οθόνη. Παράδειγμα 13 - Η Κληρονομικότητα (Inheritance)       Μια τάξη που κληρονομεί χαρακτηριστικά από μια άλλη τάξη καλείται δευτερεύουσα τάξη (subclass) και η τάξη από την οποία κληρονομεί καλείται υπερτάξη (superclass). Για παράδειγμα, θα δημιουργήσουμε μια τάξη με όνομα mammal (θηλαστικό), η οποία θα έχει την ιδιότητα (attribute) name και την μέθοδο (method) sleep(). Μετά, χρησιμοποιώντας την λέξη κλειδί extends, θα δημιουργήσουμε μια νέα τάξη με όνομα cat, η οποία θα κληρονομεί όλα τα χαρακτηριστικά της τάξης mammal αλλά θα έχει και μια επιπλέον δική της μέθοδο με όνομα speak(). public class mammal { String name; public void sleep() { System.out.println("snore ... snore ..."); } } public class cat extends mammal { public void speak() { System.out.println("νιάου νιάου"); } } Εχουμε τώρα μια δευτερεύουσα τάξη με όνομα cat της υπερτάξης mammal, όπου η τάξη cat έχει την ιδιότητα name και την μέθοδο sleep() που έχει κληρονομήσει από την υπερτάξη mammal καθώς και την δική της μέθοδο speak(). Ακολουθεί έναα παράδειγμα που δημιουργεί αντικείμενα από την παραπάνω τάξη cat και χρησιμοποιεί τα χαρακτηριστικά της. class newcat { public static void main(String arguments[ ]) { cat catty = new cat(); catty.name = "Azor"; System.out.println("Ο Azor νιαουρίζει"); catty.speak(); System.out.println("Ο Azor κοιμάται"); catty.sleep(); } } Η συμπεριφορά και οι ιδιότητες μιας τάξης αποτελούν τον συνδυασμό της δικής της συμπεριφοράς και ιδιοτήτων καθώς και της συμπεριφοράς και των ιδιοτήτων που έχει κληρονομήσει απ' όλες τις υπερτάξεις της. Δύο μέθοδοι μπορούν να έχουν το ίδιο όνομα αν έχουν διαφορετικό αριθμό ορισμάτων ή ορίσματα διαφορετικού τύπου. Μέσα σε μια δευτερεύουσα τάξη μπορούμε να ξαναορίσουμε και να αντικαταστήσουμε έτσι μια μέθοδο που έχει ήδη οριστεί σε μια υπερτάξη. Αυτό αποκαλείται υπερκάλυψη (overriding) της μεθόδου. Παράδειγμα 14 - Οι Μικροεφαρμογές (Applets)       Ολα τα applets αποτελούν δευτερεύουσες τάξεις (subclasses) της τάξης Applet, η οποία είναι μέρος του πακέτου java.applet. Δεν υπάρχει καμία κύρια μέθοδος main() σ' ένα applet της Java, όπως συμβαίνει με τις εφαρμογές, και έτσι δεν υπάρχει ένα καθορισμένο σημείο εκκίνησης για το πρόγραμμα. Αντίθετα, ένα applet περιέχει μια ομάδα από στάνταρτ μεθόδους που είναι έτοιμες να αντιμετωπίσουν συγκεκριμένα συμβάντα καθώς εκτελείται το applet. Σ' αντίθεση με τις εφαρμογές, οι τάξεις των applets πρέπει να είναι public για να μπορούν να δουλέψουν και δηλώνονται ως εξής : public class lesson01 extends java.applet.Applet { ... } Η παραπάνω τάξη κληρονομεί (extends) όλες τις μεθόδους που εμφανίζονται αυτόματα όταν χρειασθεί και που είναι οι init(), paint(), start(), stop() και destroy(). Αν θέλουμε να συμβεί κάτι σ' ένα applet, θα πρέπει να υπερκαλύψουμε (override) αυτές τις μεθόδους και οι μέθοδοι που υπερκαλύπτουμε συχνότερα είναι οι paint() και init(). Η μέθοδος paint() αποτελεί μέρος κάθε applet που θα δημιουργούμε και χωρίς αυτήν δεν μπορούμε να εμφανίσουμε τίποτα στην οθόνη. Χρησιμοποιεί ένα όρισμα της τάξης Graphics και η σύνταξή της είναι ως εξής : public class paint(Graphics screen) { ... } Θα πρέπει να έχουμε προσθέσει νωρίτερα την εντολή import java.awt.Graphics στην αρχή του κώδικα και πριν από τον ορισμό της τάξης. Η μέθοδος init() καλείται μόνο μία φορά όταν εκτελείται το applet και χρησιμοποιείται για να ορίσει μεταβλητές που χρειάζονται στο applet, όπως για παράδειγμα γραμματοσειρές (fonts), χρώματα (colors) κ.ά. Η μέθοδος start() καλείται όταν το applet αρχίζει να εκτελείται και για να κληθεί για δεύτερη φορά, πρέπει να σταματήσει η εκτέλεση του applet. Η μέθοδος stop() καλείται όταν σταματάει η εκτέλεση του applet, δηλ. όταν φεύγουμε από την ιστοσελίδα. Η μέθοδος destroy() καλείται αμέσως πριν τερματισθεί το applet. Για να τοποθετήσουμε ένα applet σε μια ιστοσελίδα, θα πρέπει να χρησιμοποιήσουμε τα tags <applet> και </applet>, ως εξής : <applet code="lesson01.class" codebase="java" height=100 width=250> Πρέπει να έχετε έναν φυλλομετρητή που να υποστηρίζει Java </applet> Η ιδιότητα code αναφέρει το όνομα του applet που θα εκτελεσθεί, η codebase τον φάκελο όπου υπάρχει ο κώδικας του applet αν δεν είναι ο τρέχον φάκελος και οι height και width το ύψος και το πλάτος αντίστοιχα του ορθογωνίου που θα εμφανίσει το applet στην οθόνη. Ανάμεσα στα tags <applet> και </applet> μπορούμε να γράψουμε ένα κείμενο για να εμφανισθεί σε φυλλομετρητές που δεν υποστηρίζουν Java. Ακολουθεί ένα απλό παράδειγμα applet. import java.awt.Graphics; public class message extends java.applet.Applet { int Value; public void init() { Value = 0; } public void paint(Graphics screen) { screen.drawString("Η αξία του αυτοκινήτου είναι : " + Value, 10, 30); } } Η μέθοδος drawString() χρησιμοποιείται για να εμφανίσουμε μηνύματα σ' ένα applet της Java αντί για την System.out.println(). Μέσα σ' ένα applet μπορούμε να χρησιμοποιήσουμε την μέθοδο repaint() για να καλέσουμε ξανά την μέθοδο paint() στην περίπτωση που έχει γίνει κάποια αλλαγή στην τιμή κάποιας μεταβλητής. Για παράδειγμα, μπορούμε να ξαναγράψουμε την παραπάνω μικροεφαρμογή αλλάζοντας μόνο την μέθοδο paint(), ως εξής : public void paint(Graphics screen) { screen.drawString("Η αξία του αυτοκινήτου είναι : " + Value, 10, 30); Value++; repaint(); } Η τιμή του Value θα αλλάζει συνέχεια και θα καλούμε την μέθοδο repaint(), που στην ουσία είναι η ίδια η μέθοδος paint(), για να εμφανισθεί η νέα τιμή της Value. Παράδειγμα 15 - Η Πολυεπεξεργασία (Multitasking)       Ο όρος πολυεπεξεργασία (multitasking) αναφέρεται στην ικανότητα ενός υπολογιστή να μπορεί να εκτελεί δύο ή περισσότερες εργασίες (tasks) ταυτόχρονα. Ενα από τα χαρακτηριστικά της Java είναι η ικανότητά της να γράφει προγράμματα που να μπορούν να κάνουν πολυεπεξεργασία. Η καθεμία απ' αυτές τις ταυτόχρονες εργασίες καλείται νήμα (thread) και η όλη διαδικασία καλείται πολυνημάτωση (multithreading). Παράδειγμα 16 - Πέρασμα Παραμέτρων σε Applets       Μπορούμε να διαβιβάσουμε παραμέτρους σ' ένα applet χρησιμοποιώντας το tag <param> και τις ιδιότητές του (attributes) name και value. Μπορούμε να έχουμε περισσότερα από ένα tag <param> σ' ένα applet, τα οποία πρέπει να βρίσκονται ανάμεσα στα tags <applet> και </applet>. Η ιδιότητα name χρησιμοποιείται για να ξεχωρίσει η παράμετρος ενώ η ιδιότητα value δίνει μια τιμή στην παράμετρο. Με την μέθοδο getParameter() της τάξης Applet μπορούμε να διαβάσουμε την τιμή μιας παραμέτρου ενός tag <param>. Σαν όρισμα στην μέθοδο δίνουμε το όνομα της παραμέτρου όπως ορίζεται στην ιδιότητα name. Για παράδειγμα, αν έχουμε τα εξής σ' ένα tag <applet> : <applet> ... <param name ="text" value="Home"> ... </applet> Τότε με την παρακάτω εντολή μέσα από τον κώδικα του applet της Java : String buttonText = getParameter("text") θα καταχωρηθεί η τιμή "Home" στο string buttonText. Επειδή η μέθοδος getParameter() επιστρέφει όλες τις παραμέτρους σαν strings, θα πρέπει να κάνουμε μετατροπές τύπου, ως εξής : <param name="age" value="36"> ... int age; String ageParam = getParameter("age"); age = Integer.parseInt(ageParam); Αν μια παράμετρος δεν υπάρχει, τότε η μέθοδος getParameter() επιστρέφει μια τιμή null. String pname; String nameParam = getParameter("username"); if (nameParam != null) pname = nameParam; ... screen.drawString("Ονομα χρήστη : " + pname, 10, 30); Παράδειγμα 17 - Η Τάξη Font (Γραμματοσειρές)       Για να μπορέσουμε να εμφανίσουμε μια γραμματοσειρά στην Java, πρέπει να γνωρίζουμε τα εξής στοιχεία γι' αυτήν :
Για να δημιουργήσουμε ένα δικό μας αντικείμενο γραμματοσειράς, χρησιμοποιούμε την τάξη Font με τον τελεστή new και περνάμε τρία ορίσματα, όπως δηλώθηκαν παραπάνω. Μπορούμε να χρησιμοποιήσουμε τις σταθερές Font.PLAIN, Font.BOLD, Font.ITALIC και Font.BOLD+Font.ITALIC. Με την μέθοδο setFont() ορίζουμε μια γραμματοσειρά ενώ με την μέθοδο getFont() μπορούμε να δούμε ποια γραμματοσειρά χρησιμοποιείται εκείνη τη στιγμή. Τα στοιχεία της τρέχουσας γραμματοσειράς χρησιμοποιούνται για την εμφάνιση του κειμένου στην οθόνη. Ακολουθεί ένα παράδειγμα. import java.awt.*; public class Fonts extends java.applet.Applet { public void paint(Graphics screen) { Font currentFont = new Font("TimesRoman", Font.PLAIN, 20); screen.setFont(currentFont); screen.drawString("Γραμματοσειρά Plain Times Roman 20 point", 10, 30); Font combFont = new Font("TimesRoman", Font.BOLD+Font.ITALIC, 40); screen.setFont(combFont); screen.drawString("Γραμματοσειρά Bold+Italic Times Roman 40 point", 10, 50); } } Παράδειγμα 18 - Η Τάξη Color (Χρώματα)       Μπορούμε να χρησιμοποιήσουμε δύο τρόπους για να ορίσουμε το χρώμα που θέλουμε να εμφανίσουμε σ' ένα applet. Ο πρώτος χρησιμοποιεί μια σταθερή μεταβλητή της τάξης Color και ο δεύτερος ορίζει νέα χρώματα με βάση τις RGB (red, green, bule) τιμές τους από 0-255. Μπορούμε να ορίσουμε το χρώμα του φόντου της εφαρμογής με την μέθοδο setBackground() και το χρώμα του κειμένου της εφαρμογής με την μέθοδο setColor(). Ακολουθεί ένα παράδειγμα. import java.awt.*; public class Colors extends java.applet.Applet { public void paint(Graphics screen) { setBackground(Color.green); screen.drawString("Χρώμα φόντου μαύρο", 10, 30); screen.setColor(Color.blue); screen.drawString(Χρώμα κειμένου κόκκινο", 10, 50); Color mystery = new Color(100, 200, 50); setBackground(mystery); screen.drawString("Χρώμα φόντου τυχαίο", 10, 70); } } Παράδειγμα 19 - Χρήση Γραφικών       Στην Java μπορούμε να σχεδιάσουμε τα εξής γραφικά :
Για να σχεδιάσουμε ένα γραφικό στην Java χρησιμοποιούμε μια μέθοδο της τάξης Graphics. Για να σχεδιάσουμε μια γραμμή χρησιμοποιούμε την μέθοδο drawLine() ως εξής : screen.setColor(Color.red); screen.drawLine(100, 150, 170, 200); Η παραπάνω εντολή σχεδιάζει μια γραμμή με πλάτος 1 pixel και χρώμα κόκκινο από την θέση (100, 150) της οθόνης μέχρι την θέση (170, 200). Για να σχεδιάσουμε ένα ορθογώνιο ή τετράγωνο έχουμε πολλές επιλογές : Η μέθοδος drawRect() για απλό ορθογώνιο, μη γεμισμένο και χωρίς στρογγυλεμένες γωνίες : screen.drawRect(100, 150, 200, 250) Η παραπάνω εντολή σχεδιάζει ένα ορθογώνιο με πάνω αριστερά κορυφή στο σημείο 100, 150, πλάτος 200 και ύψος 250. Η μέθοδος fillRect() για γεμισμένο ορθογώνιο : screen.setColor(Color.blue); screen.fillRect(100, 150, 200, 250) Η παραπάνω εντολή σχεδιάζει ένα ορθογώνιο γεμισμένο με μπλε χρώμα, με πάνω αριστερά κορυφή στο σημείο 100, 150, πλάτος 200 και ύψος 250. Η μέθοδος drawRoundRect() για ορθογώνιο με στρογγυλεμένες γωνίες : screen.setColor(Color.green); screen.drawRoundRect(100, 150, 200, 250, 15, 15) Η μέθοδος fillRoundRect() για γεμισμένο ορθογώνιο με στρογγυλεμένες γωνίες : screen.setColor(Color.yellow); screen.fillRoundRect(100, 150, 200, 250, 15, 15) Οι μέθοδοι drawRoundRect() και fillRoundRect() έχουν δύο επιπλέον παραμέτρους που είναι η απόσταση από την γωνία που θέλουμε να ξεκινάει η καμπύλη. Για να σχεδιάσουμε μια έλλειψη ή έναν κύκλο χρησιμοποιούμε την μέθοδο drawOval() ως εξής : screen.setColor(Color.red); screen.drawOval(100, 150, 20, 30); Η παραπάνω εντολή σχεδιάζει μια έλλειψη με κόκκινο χρώμα, με πάνω αριστερά κορυφή στο σημείο 100, 150, πλάτος 20 και ύψος 30. Η μέθοδος fillOval() γεμίζει την έλλειψη με χρώμα : screen.setColor(Color.yellow); screen.fillOval(100, 150, 20, 30); Για να σχεδιάσουμε ένα τόξο χρησιμοποιούμε την μέθοδο drawArc() ως εξής : screen.setColor(Color.blue); screen.drawArc(100, 150, 30, 20, 45, 180); Η παραπάνω εντολή σχεδιάζει ένα τόξο έλλειψης με μπλε χρώμα, με πάνω αριστερά κορυφή στο σημείο 100, 150, πλάτος 20, ύψος 30, γωνία εκκίνησης του τόξου στις 45 μοίρες και γωνία του τόξου 180 μοίρες με φορά αντίθετη αυτής των δεικτών του ρολογιού. Η μέθοδος fillArc() γεμίζει το τόξο με χρώμα : screen.setColor(Color.green); screen.fillArc(100, 150, 20, 20, 90, -180); Για να σχεδιάσουμε ένα πολύγωνο, πρέπει πρώτα να δημιουργήσουμε έναν πίνακα (array) ακεραίων που θα περιέχει τις x συντεταγμένες και έναν άλλον πίνακα ακεραίων που θα περιέχει τις y συντεταγμένες των κορυφών του πολυγώνου. Χρησιμοποιούμε την μέθοδο drawPolygon(), η οποία παίρνει σαν παραμέτρους τους δύο πίνακες με τις συντεταγμένες καθώς και έναν ακέραιο αριθμό που παριστάνει τον αριθμό των κορυφών του πολυγώνου. int[] xPoints = {100, 150, 200, 250}; int[] yPoints = {50, 100, 150, 300}; int point = 4; screen.setColor(Color.red); screen.drawPolygon(xPoints, yPoints, points); Η μέθοδος fillPolygon() γεμίζει το πολύγωνο με χρώμα : screen.fillPolygon(xPoints, yPoints, points); Παράδειγμα 20 - Πλήκτρα Εντολής       Για να μπορέσουμε να δημιουργήσουμε ένα συστατικό, όπως ένα πλήκτρο εντολής (button) σ' ένα πρόγραμμα της Java, δημιουργούμε πρώτα το αντικείμενο και μετά χρησιμοποιούμε την μέθοδο add() για να το προσθέσουμε σ' ένα υπάρχον συστατικό. Ενα συστατικό Button είναι ένα πλήκτρο με δυνατότητα κλικ και με μια ετικέτα (label, caption) που περιγράφει τι θα συμβεί αν κάνουμε κλικ στο πλήκτρο. Για να προσθέσουμε ένα button σ' ένα applet, γράφουμε τον εξής κώδικα : import java.awt.*; public class lesson20 extends java.applet.Applet { Button helloButton = new Button("Hello"); public void init() { add(helloButton); } } Παράδειγμα 21 - Ετικέτες και Πλαίσια Κειμένου       Μια ετικέτα (Label) εμφανίζει ένα μήνυμα (string) που δεν μπορεί να αλλαχθεί από τον χρήστη, ενώ ένα πλαίσιο κειμένου (TextField) είναι μια περιοχή όπου ο χρήστης μπορεί να καταχωρήσει μία γραμμή κειμένου. Μπορούμε να δημιουργήσουμε ετικέτες και πλαίσια κειμένου σ' ένα applet της Java ως εξής : import java.awt.*; public class lesson21 extends java.applet.Applet { Label emailLabel = new Label("Διεύθυνση e-mail : ", Label.RIGHT); TextField emailAddress = new TextField(30); public void init() { add(emailLabel); add(emailAddress); } } Παράδειγμα 22 - Πλαίσια Ελέγχου και Πλήκτρα Επιλογής       Ενα πλαίσιο ελέγχου (checkbox) είναι ένα τετράγωνο συστατικό που μπορούμε να επιλέξουμε ανεξάρτητα από άλλα πλαίσια ελέγχου, ενώ ένα πλήκτρο επιλογής (radio button) είναι ένα κυκλικό συστατικό όπου μπορούμε να επιλέξουμε ένα και μόνο ένα από μια ομάδα πλήκτρων επιλογής. Η Java χαρακτηρίζει και τα πλαίσια ελέγχου και τα πλήκτρα επιλογής σαν CheckBox και τα διαχωρίζει αν κατά την στιγμή της δημιουργίας τους ανήκουν ή όχι σε μια ομάδα (CheckboxGroup). Για να δημιουργήσουμε ένα πλαίσιο ελέγχου σ' ένα applet γράφουμε τον εξής κώδικα : import java.awt.*; public class lesson22a extends java.applet.Applet { Checkbox emailMe = new Checkbox("Στείλτε e-mail", true); public void init() { add(emailMe); } } Μπορούμε να προσθέσουμε δύο ορίσματα κατά την δημιουργία ενός πλαισίου ελέγχου, όπου το πρώτο είναι μια επεξηγηματική γραμμή κειμένου που θα εμφανισθεί δίπλα στο πλαίσιο ελέγχου και το δεύτερο είναι μια τιμή boolean που διευκρινίζει αν το πλαίσιο ελέγχου θα είναι επιλεγμένο (true) ή όχι (false) όταν εκτελεσθεί η εφαρμογή. Για να δημιουργήσουμε πλήκτρα επιλογής σ' ένα applet πρέπει πρώτα να δημιουργήσουμε μια ομάδα πλαισίων ελέγχου με το αντικείμενο CheckboxGroup και μετά κατά την δημιουργία των πλαισίων ελέγχου να χρησιμοποιήσουμε και μια τρίτη παράμετρο που να δηλώνει την ομάδα στην οποία θα ανήκει αυτό το πλαίσιο ελέγχου, άρα στην ουσία δημιουργούμε ένα πλήκτρο επιλογής. Γράφουμε τον εξής κώδικα : import java.awt.*; public class lesson22b extends java.applet.Applet { CheckboxGroup cards = new CheckboxGroup(); Checkbox visacard = new Checkbox("Visa Card", true, cards); Checkbox mastercard = new Checkbox("Master Card", false, cards); Checkbox dinerscard = new Checkbox("Diners Card", false, cards); public void init() { add(visacard); add(mastercard); add(dinerscard); } } Δημιουργήσαμε ένα checkbox group με όνομα cards και όλα τα πλαίσια ελέγχου (στην ουσία πλήκτρα επιλογής) που δημιουργήσαμε προστέθηκαν σ' αυτή την ομάδα (group). Παράδειγμα 23 - Λίστες Επιλογής       Μια λίστα επιλογής (choice) είναι μια πτυσσόμενη λίστα επιλογών από τις οποίες μόνο μία μπορεί να είναι επιλεγμένη. Είναι γνωστή και σαν πτυσσόμενο ή σύνθετο πλαίσιο (combo box). Για να δημιουργήσουμε μια λίστα επιλογής, δημιουργούμε πρώτα το αντικείμενο και μετά προσθέτουμε μία-μία τις επιλογές, ως εξής : import java.awt.*; public class lesson23 extends java.applet.Applet { Choice sport = new Choice(); public void init() { sport.add("Μπάσκετ"); sport.add("Βόλλεϋ"); sport.add("Ποδόσφαιρο"); sport.add("Κολύμβηση"); add.sport(); } } Δημιουργήσαμε μια λίστα επιλογής με τέσσερα αθλήματα. Παράδειγμα 24 - Περιοχές Κειμένου       Μια περιοχή κειμένου (TextArea) είναι ένα πεδίο κειμένου όπου μπορούμε να καταχωρήσουμε περισσότερες από μία γραμμές κειμένου. Σε μια περιοχή κειμένου πρέπει να καθορίσουμε το πλάτος και το ύψος της και μπορούμε να τοποθετήσουμε και ένα αρχικό κείμενο μαζί την δήλωσή της. Μπορούμε να δημιουργήσουμε μια περιοχή κειμένου σ' ένα applet της Java ως εξής : import java.awt.*; public class lesson24 extends java.applet.Applet { TextArea comments = new TextArea("Florina per sempre", 10, 20); public void init() { add(comments); } } Παράδειγμα 25 - Τα Layout Managers       Τα αντικείμενα Panel ανήκουν στην κατηγορία των αντικειμένων που είναι γνωστά σαν υποδοχείς (containers). Τα αντικείμενα αυτά δεν εμφανίζουν τίποτα και χρησιμοποιούνται για να περιέχουν άλλα αντικείμενα. Το προκαθορισμένο layout manager είναι η τάξη FlowLayout που έχουμε χρησιμοποιήσει σ' όλα τα παραδείγματά μας μέχρι τώρα, χωρίς να το έχουμε δηλώσει ρητά. Σύμφωνα μ' αυτό το layout manager, τα αντικείμενα τοποθετούνται σε μια περιοχή από αριστερά προς τα δεξιά και στην επόμενη γραμμή όταν δεν υπάρχει άλλος χώρος. Παράδειγμα 26 - Ο GridLayout Manager       Η τάξη GridLayout οργανώνει τα συστατικά σ' έναν υποδοχέα (container) μ' έναν συγκεκριμένο αριθμό γραμμών και στηλών, ως εξής : GridLayout ourLayout = new GridLayout(3, 4); setLayout(ourLayout); Η παραπάνω διάταξη ορίζει την τοποθέτηση των αντικειμένων σ' ένα πλέγμα (grid) με 3 γραμμές και 4 στήλες. Παράδειγμα 27 - Ο BorderLayout Manager       Η τάξη BorderLayout τακτοποιεί τα συστατικά σε πέντες περιοχές, όπου πο τέσσερις χαρακτηρίζονται από τις θέσεις της πυξίδας, δηλ. North, South, East, West και μια για το κέντρο (Center), ως εξής : import java.awt.*; public class lesson27 extends java.applet.Applet { Button oneButton = new Button("Ενα"); Button twoButton = new Button("Δύο"); Button threeButton = new Button("Τρία"); Button fourButton = new Button("Τέσσερα"); Button fiveButton = new Button("Πέντε"); public void init() { BorderLayout ourLayout = new BorderLayout(); setLayout(ourLayout); add(oneButton, "North"); add(twoButton, "South"); add(threeButton, "East"); add(fourButton, "West"); add(fiveButton, "Center"); } } Παράδειγμα 28 - Τα Συμβάντα Χρήστη       Η απόκριση στα συμβάντα χρήστη (user events) σ' ένα πρόγραμμα της Java απαιτεί την χρήση ενός ή περισσοτέρων EventListener interfaces. Οι τάξεις ακρόασης (listening classes) αποτελούν μέρος του πακέτου java.awt.event και μπορούμε να τις κάνουμε διαθέσιμες με την εξής εντολή : import java.awt.event.*; Πρέπει επίσης να χρησιμοποιήσουμε την εντολή implements για να δηλώσουμε ότι θα χρησιμοποιήσουμε ένα ή περισσότερα listening interfaces. Η επόμενη εντολή δημιουργεί μια τάξη που χρησιμοποιεί το ActionListener, το οποίο είναι ένα interface που χρησιμοποιείται με πλήκτρα εντολής (buttons) και άλλα συστατικά. public class Graph extends java.applet.Applet implements ActionListener { ... } Το EventListener interface δίνει την δυνατότητα σ' ένα συστατικό ενός γραφικού interface χρήστη να παράγει συμβάντα χρήστη. Ενα πρόγραμμα πρέπει να περιλαμβάνει ένα listener interface για κάθε τύπο συστατικού που επιθυμεί να ακούσει, ως εξής : public class Graph3d extends java.applet.Applet implements ActionListener, MouseListener { ... } Αφού έχουμε δημιουργήσει το interface που απαιτείται για ένα συγκεκριμένο συστατικό, θα πρέπει να ορίσουμε αυτό το συστατικό ώστε να δημιουργεί συμβάντα χρήστη. Για να κάνουμε ένα πλήκτρο εντολής (button) να παράγει ένα συμβάν, χρησιμοποιούμε την μέθοδο addActionListener(), ως εξής : Button button1 = new Button("Εκκίνηση"); button1.addActionListener(this); Οταν παράγεται ένα συμβάν χρήστη από ένα συστατικό που περιέχει έναν listener, θα κληθεί αυτόματα μια μέθοδος. Αυτές οι μέθοδοι πρέπει να βρίσκονται στην τάξη που καθορίσθηκε όταν ο listener προστέθηκε στο συστατικό. Ο κάθε listener διαθέτει διαφορετικές μεθόδους που καλούνται για να συλλάβουν τα συμβάντά τους. Για παράδειγμα, το ActionListener interface στέλνει συμβάντα σε μια τάξη που καλείται actionPerformed(), ως εξής : void public actionPerformed(ActionEvent e) { ... } Ολα τα συμβάντα ενέργειας που στέλνονται σ' αυτό το πρόγραμμα θα πάνε σ' αυτήν την μέθοδο. Στην συγκεκριμένη περίπτωση στέλνουμε ένα αντικείμενο με όνομα e της τάξης ActionEvent στην μέθοδο actionPerformed(). Υπάρχουν πολλές διαφορετικές τάξεις αντικειμένων που αντιπροσωπεύουν τα συμβάντα χρήστη που μπορούν να σταλούν σ' ένα πρόγραμμα. Αυτές οι τάξεις έχουν μεθόδους που μπορούμε να χρησιμοποιήσουμε για να βρούμε ποιο συστατικό προκάλεσε την εκτέλεση του συμβάντος. Στην μέθοδο actionPerformed() μπορούμε να αναγνωρίσουμε το συστατικό αυτό με την εξής εντολή : String cmd = e.getActionCommand(); Η μέθοδος getActionCommand() επιστρέφει ένα string και αν το συστατικό είναι ένα πλήκτρο εντολής (button), η τιμή του string θα είναι η ετικέτα (label, caption) του πλήκτρου εντολής, ενώ αν το συστατικό είναι ένα πλαίσιο κειμένου (text field), η τιμή του string θα είναι το κείμενο που έχει καταχωρηθεί στο πλαίσιο κειμένου. Με την μέθοδο getSource() μπορούμε να μάθουμε το αντικείμενο που προκάλεσε το συμβάν, ως εξής : Object source = e.getSource(); Παράδειγμα 29 - Συμβάντα με Πλαίσια Ελέγχου και Λίστες Επιλογής       Τα πλαίσια ελέγχου και οι λίστες επιλογής απαιτούν το ItemListener interface. Για να κάνουμε ένα απ' αυτά τα συστατικά να δημιουργεί συμβάντα, χρησιμοποιούμε την μέθοδο addItemListener(). Οι επόμενες εντολές δημιουργούν ένα πλαίσιο ελέγχου με όνομα visaCard και το κάνουν να στέλνει συμβάντα χρήστη κάθε φορά που κάνουμε κλικ πάνω του. Checkbox visaCard = new Checkbox("Visa Card", true); visaCard.addItemListener(this); Τα συμβάντα λαμβάνονται από την μέθοδο itemStateChanged(), η οποία παίρνει σαν όρισμα ένα αντικείμενο ItemEvent. Για να βρούμε ποιο αντικείμενο προκάλεσε το συμβάν, χρησιμοποιούμε την μέθοδο getItem(). Για να βρούμε αν ένα πλαίσιο ελέγχου είναι επιλεγμένο ή όχι, χρησιμοποιούμε την μέθοδο getStateChange() με τις σταθερές ItemEvent.SELECTED και ItemEvent.DESELECTED, ως εξής : int status = visaCard.getStateChanged(); if (status = = ItemEvent.SELECTED) { // το στοιχείο είναι επιλεγμένο } else { // το στοιχείο δεν είναι επιλεγμένο } Για να βρούμε την τιμή που έχει επιλεγεί σ' ένα αντικείμενο λίστας, χρησιμοποιούμε την μέθοδο getItem() και μετατρέπουμε την τιμή που επιστρέφει σε string, ως εξής : Object which = visaCard.getItem(); String answer = (String) which; Παράδειγμα 30 - Συμβάντα με Πλαίσια Κειμένου       Αν θέλουμε να ελέγξουμε αν έχει λάβει χώρα ένα συμβάν σ' ένα πλαίσιο κειμένου, όπως αλλαγή της τιμής του, χρησιμοποιούμε το TextListener interface. Η μέθοδος addTextListener() κάνει ένα συστατικό κειμένου να μπορεί να δημιουργεί συμβάντα χρήστη και η μέθοδος textValueChanged() λαμβάνει τα συμβάντα, ως εξής : public void textValueChanged(TextEvent txt) { Object source = txt.getSource(); if (source = = address) { String newAddress = address.getText(); } else { String newZipCode = zipCode.getText(); } }
|
||||||
(c)
2001 created by Magnet Internet Services
|