ΑΛΛΗΛΕΠΙ ΡΑΣΗ ΑΝΘΡΩΠΟΥ ΜΗΧΑΝΗΣ 1 o ΕΡΓΑΣΤΗΡΙO-3ασκήσεις Θα χρησιµοποιηθεί το πακέτο ΝetBeansIDE Θα δηµιουργήσουµε µια νέα εφαρµογή/ Project µε όνοµα π.χ. Ergastirio1 επιλέγοντας από το 1 ο µενού File / New Project. Κατόπιν επιλέγουµε από το Categories το Java, και από το Projects Java Application και πατάµε το Next button. Στο παράθυρο Νew Java Application θα καθοριστεί Project Name: το όνοµα της εφαρµογής π.χ. Ergastirio1 (καλό είναι να βάζετε και το όνοµά σας π.χ. Erg1Georgiou) Project Location το σηµείο/location που θέλουµε να αποθηκευτεί (µε Browse επιλέγουµε την διαδροµή) Ξετσεκάρεται το "Create Main Class" checkbox (που είναι ήδη τσεκαρισµένο). Αν όλα ΟΚ πατάµε το "Finish" button Θα δηµιουργηθούν (σταδιακά) 3 φόρµες/πλαίσιο µε όνοµα π.χ. Ask1, Ask2, Ask3. Για την 1 η φόρµα Ask1 Με δεξί κλικ στο Source Packages του project Ergastirio1 επιλέγουµε New -> JFrame Form (Το πλαίσιο αυτό θα είναι η Swing main class, της εφαρµογής) ώστε όνοµα κλάσης Class Name πχ Αsk1. Αν όλα ΟΚ πατάµε το "Finish" button Oι 3 ασκήσεις µπορούν να µπουν στο ίδιο project (Ergastirio1) δηµ/ντας 3 JFrame Form. (Για την 2 η άσκηση µε δεξί κλικ στο project/properties και Run θα αλλάξουµε την Main Class από Αsk1 σε Ask2 και για την 3 η άσκηση σε Ask3 κοκ). Ασκηση 1 η - Ποιο κουµπί πατήθηκε Όταν συμβαίνει ένα γεγονός τότε αυτό διαχειρίζεται από τη μέθοδο ΑctionPerformed private void jbutton1actionperformed(java.awt.event.actionevent evt) { jlabel1.settext( "You pressed the 1st button" ); jlabel1.settext( "You pressed the 2nd button" ); jbutton1 jlabel1 jbutton2 Να αλλάζει το κείμενο της ετικέτας (jlabel1), έτσι ώστε να γράφει ποιο κουμπί πατήθηκε (το 1 ο ή το 2 ο ). Μέθοδος settext Καθορίζει το κείμενο μιας ετικέτας (default value είναι null). VK -14/10/2016 Σελίς 1
Ασκηση 2 η - Πόσος χρόνος πέρασε import java.util.calendar; import java.util.date; Calendar class: H μέθοδος getinstance επιστρέφει ένα Calendar object με τιμές στα πεδία του σύμφωνα με την τρέχουσα ημερομηνία και ώρα: Calendar cal=calendar.getinstance(); //αρχικοποίηση αντικειμένου με τρέχουσες τιμές. Date mera=cal.gettime(); // η τιμή του Calendar's time σε μορφή date ή long wra =cal.gettimeinmillis(); // η τιμή του Calendar's time σε μορφή long /milliseconds. jlabel1.settext( "Today is:" + mera + "\nlong: "+ wra/1000 ); // Variables declaration private long starttime; Global variable jbutton1 jlabel1 jbutton2 Να αλλάζει το κείμενο της ετικέτας έτσι ώστε να γράφει πόσος χρόνος μεσολάβησε από το πάτημα του 1 ου με το 2 ο κουμπί private void jbutton1actionperformed(java.awt.event.actionevent evt) { Calendar cal =Calendar.getInstance(); starttime=cal.gettimeinmillis()/1000; jlabel1.settext("calculating"); Calendar cal =Calendar.getInstance(); long stoptime=cal.gettimeinmillis()/1000; Local variable long ellapsedtime= stoptime - starttime; jlabel1.settext( "Time" +ellapsedtime); VK -14/10/2016 Σελίς 2
Ασκηση 3 η - Κωδικοποιητής jlabel1 jtextfield1 Μέσα στο κουτί του TextField μπορώ να γράψω κείμενο. Αρχικά το θέλουμε άδειο. Το ίδιο θα γίνεται και με το κουμπί Reset (jbutton3) (άδεια κείμενα) jbutton1 jbutton2 jbutton3 Να κωδικοποιείται το κείμενο του 1 ου ΤextField και να εμφανίζεται κωδικοποιημένο στο 2 ο ΤextField private void jbutton1actionperformed (java.awt.event.actionevent evt) { StringBuilder str = new StringBuilder(jTextField1.getText()); for ( int i = 0; i < str.length(); i++ ) { str.setcharat( i, (char) (str.charat(i) + 1) ); jtextfield2.settext(str.tostring() ); StringBuilder str = new StringBuilder(jTextField2.getText()); for (int i = 0; i < str.length(); i++) { str.setcharat(i, (char) (str.charat(i) - 1)); jtextfield1.settext(str.tostring() ); private void jbutton3actionperformed(java.awt.event.actionevent evt) { jtextfield1.settext(null); jtextfield2.settext(null); Μέθοδος gettext Eπιστρέφει το σε String το κείμενο του ΤextΣυστατικού (εδώ έχουμε TextField). H μεταβλητή που θα χρησιμοποιήσω για το κείμενο του TextField στην Άσκηση αυτή, δεν θα είναι String αλλά StringBuilder Μέθοδος ανεύρεσης χαρακτήρα μιας συμβολοσειράς public char CharAt(int index) : επιστρέφει τον χαρακτήρα που βρίσκεται στη θέση index πχ char ch=jtextfield1.gettext().charat(2); Μέθοδος αλλαγής χαρακτήρα συμβολοσειράς VK -14/10/2016 Σελίς 3
Ένα String δεν μπορεί να τροποποιηθεί σε αντίθεση με ένα StringBuilder public void setcharat(int index, char ch) : Ο χαρακτήρας στη θέση index αλλάζει και γίνεται ch. Πχ. StringBuilder s =new StringBuilder("text"); //δεν μπορώ να θέσω κατευθείαν s="text" s.setcharat(2,'x'); Η συμβολοσειρά μετατρέπεται σε μια νέα ακολουθία χαρακτήρων, που είναι ταυτόσημη με την παλιά ακολουθία χαρακτήρων, εκτός του ότι περιέχει τον χαρακτήρα ch στη θέση του δείκτη. Ο index πρέπει να είναι 0, and από το μήκος της / length() Συμβολοσειρές: String, StringBuffer, StringBuilder Classes String για σταθερό String Aφού δημιουργηθούν οι τιμές τους δεν μπορούν να αλλαχθούν! Η Java υποστηρίζει την συνένωση/concat συμβολοσειρών ( + ), καθώς και τη μετατροπή/conversion άλλων αντικειμένων σε strings. Οι ενώσεις String υλοποιούνται μέσω των κλάσεων StringBuilder (ή StringBuffer ) και την μέθοδο append. Οι μετατροπές σε String υλοποιούνται με τη μέθοδο tostring, που ορίζεται στην κλάση Object και κληρονομείται από όλες τις κλάσεις σε Java. StringBuffer για τροποποιήσιμο String thread-safe(***) Ένα StringBuffer είναι σαν ένα String, αλλά μπορεί να τροποποιηθεί. Σε οποιοδήποτε χρονικό σημείο, περιέχει κάποια ιδιαίτερη αλληλουχία χαρακτήρων, αλλά το μήκος και το περιεχόμενο της αλληλουχίας μπορεί να μεταβληθεί μέσω ορισμένων μεθόδων κλήσεων. Βασικές μέθοδοι είναι οι append and insert http://docs.oracle.com/javase/7/docs/api/java/lang/stringbuilder.html StringBuilder για τροποποιήσιμο String non thread-safe Παρόμοιο με το StringBuffer μη ασφαλές για πολλαπλά threads. Για ένα thread είναι πιο γρήγορο από το StringBuffer. Το StringBuilder μετατρέπεται σε String με την μέθοδο tostring (). (***) Ένα κομμάτι κώδικα είναι thread-safe όταν επεξεργαζόμενο κοινά δεδομένα, εγγυάται την ασφαλή εκτέλεση από πολλαπλά threads ταυτόχρονα (πχ a=0; a=a+1; b=a ; ίδιο αποτέλεσμα για το b=1) VK -14/10/2016 Σελίς 4
String StringBuffer StringBuilder ------------------------------------------------------------------------------- Storage Area Constant String Pool Heap/σωρός Heap Modifiable No (immutable) Yes( mutable ) Yes( mutable ) Thread Safe Yes Yes No Performance Fast Very slow Fast VK -14/10/2016 Σελίς 5