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

Σχετικά έγγραφα
ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

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

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

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

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

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

10.1 Γενικά για τα streams

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

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

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

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

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

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

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

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

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

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

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Εργαστήριο Εφαρμοσμένης Πληροφορικής

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Ask1, Ask2, Ask3. private void jbutton1actionperformed(java.awt.event.actionevent evt) { jlabel1.settext( "You pressed the 1st button" ); }

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

8.1 Top-Level Swing Containers και Swing Components

Week 10: Graphical User Interfaces

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Mεταβλητές (variables) και Σταθερές (constants)

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

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Generics και ArrayLists

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

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

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

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

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

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

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

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

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

public class ArrayStack implements Stack {

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

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

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

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

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

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

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

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

Εισαγωγή στον Προγ/μό Η/Υ

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (java threads)

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Επεξεργασία πολλαπλών φύλλων εργασίας - Γραφημάτων Excel

Εισαγωγή στον Προγραμματισμό

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Week 12: GUIs with Swing

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

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

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

Βασικά Στοιχεία της Java

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

Transcript:

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

Στην Ανάπτυξη Διεπιφανειών Χρήστη μια σημαντική λειτουργία είναι η εισαγωγή, εμφάνιση και τροποποίηση κειμένου. Θα μελετήσουμε αναλυτικά τέσσερα συστατικά της Java Swing για την υλοποίηση λειτουργιών σχετικών με τη διαχείριση κειμένου. Τα συστατικά που θα μελετήσουμε είναι: JTextField JPasswordField JFormattedTextField JTextArea Δρ. Κεραμόπουλος Ευκλείδης 2

Όλα τα συστατικά κειμένου στη Java Swing είναι παιδιά της αφηρημένης τάξης JTextComponent. Στη τάξη JTextComponent δηλώνεται κοινή συμπεριφορά για όλα τα συστατικά κειμένου της Java Swing και βρίσκεται στο πακέτο javax.swing.text. Τα μοντέλα που ακολουθεί το JTextComponent ορίζονται στη διεπαφή Document είναι: PlainDocument για απλό κείμενο DefaultStyleDocument για HTML, RTF κτλ κείμενο HTMLDocument για HTML κείμενο Δρ. Κεραμόπουλος Ευκλείδης 3

Ένα σημαντικό χαρακτηριστικό στη διαχείριση κειμένου είναι ο δείκτης του ποντικιού (cursor), ο οποίος στη Java Swing ονομάζεται caret. Η θέση του caret σε ένα κείμενο δείχνει που θα συμβεί το επόμενο γεγονός. Υπάρχει η δυνατότητα να αλλάξουμε το χρώμα, τη θέση, το σχήμα του caret. Με βάση τη θέση του caret είναι δυνατόν να πάρουμε ένα επιλεγμένο κομμάτι από το κείμενο. Με χρήση μεθόδων ένα επιλεγμένο κομμάτι μπορούμε να το αντιγράψουμε, αποκόψουμε, επικολλήσουμε. Δρ. Κεραμόπουλος Ευκλείδης 4

Κάθε φορά που ο caret αλλάζει θέση δημιουργείται ένα CaretEvent γεγονός το οποίο «ακούγεται» από τον ακροατή CaretListener και υλοποιείται από την μέθοδο caretupdate void caretupdate(caretevent ce); Με τη μέθοδο getdot() επιστρέφεται η θέση του caret. Με τη μέθοδο getmark() επιστρέφεται η πρώτη θέση επιλογής ενός κειμένου. Ανάμεσα στο mark και το dot είναι το επιλεγμένο κείμενο. Έτσι όταν mark και dot έχουν την ίδια τιμή τότε δεν έχει επιλεγεί κείμενο. Δρ. Κεραμόπουλος Ευκλείδης 5

ΜΕΘΟΔΟΣ void addcaretlistener(caretlistener cl) void copy() void cut() void paste() int getcaretposition() Document getdocument() String gettext() String gettext(int start, int end) void settext(string str) ΠΕΡΙΓΡΑΦΗ Προσθέτει ένα ακροατή για caret γεγονότα. Αντιγράφει στο clipboard το επιλεγμένο κείμενο. Αντιγράφει στο clipboard το επιλεγμένο κείμενο. Επίσης, διαγράφει το επιλεγμένο κείμενο. Κάνει επικόλληση του κειμένου που βρίσκεται στο clipboard στη περιοχή ακριβώς πριν τη θέση του caret. Σε περίπτωση που είναι επιλεγμένο άλλο κείμενο τότε το αντικαθιστά με το κείμενο που βρίσκεται στο clipboard. Επιστρέφει πόσους χαρακτήρες απέχει το caret από την αρχή του κειμένου. Επιστρέφει το μοντέλο που ακολουθείται. Επιστρέφει όλο το κείμενο που περιέχεται στο συστατικό. Επιστρέφει το κείμενο που περιέχεται ανάμεσα στο start και το end. Καταχωρεί το κείμενο που περιέχει το str. Δρ. Κεραμόπουλος Ευκλείδης 6

ΜΕΘΟΔΟΣ String getselectedtext() int getselectionstart() int getselectionend() boolean iseditable() void seteditable(boolean conedit) void movecaretposition(int newloc) void read(reader input, Object what) throw IOExcption void write(writer output) throws IOException ΠΕΡΙΓΡΑΦΗ Επιστρέφει το κείμενο που είναι επιλεγμένο. Επιστρέφει πόσους χαρακτήρες απέχει το πρώτο σημείο του επιλεγμένου κειμένου από την αρχή του κειμένου. Επιστρέφει πόσους χαρακτήρες απέχει το τελευταίο σημείο του επιλεγμένου κειμένου από την αρχή του κειμένου. Επιστρέφει true αν το κείμενο μπορεί να διορθωθεί και false αν είναι read-only Ορίζει αν το κείμενο θα μπορεί να διορθωθεί (true) ή αν θα είναι read-only (false) Τοποθετεί το caret στη θέση newloc το οποίο είναι πόσους χαρακτήρες απέχει από την αρχή του κειμένου. Το κείμενο ανάμεσα στην προηγούμενη θέση και την τρέχουσα του caret επιλέγεται. Αντιγράφει κείμενο από το Input Stream στο συστατικό κειμένου. Γράφει το κείμενο που περιέχεται στο συστατικό κειμένου στο Output Stream. Δρ. Κεραμόπουλος Ευκλείδης 7

ΜΕΘΟΔΟΣ void select(int start, int end) void selectall() Insets getmargin() void setmargins(insets margins) ΠΕΡΙΓΡΑΦΗ Επιλέγει το κείμενο που περιέχεται από τη θέση start στη θέση end. To start θα πρέπει να είναι μικρότερο ή ίσο του end. Επιλέγει όλο το κείμενο που περιέχεται στο συστατικό κειμένου. Επιστρέφει ένα αντικείμενο Insets το οποίο περιέχει τα περιθώρια. Ορίζει τα περιθώρια σύμφωνα με το αντικείμενο margins. Δρ. Κεραμόπουλος Ευκλείδης 8

Το πιο απλό συστατικό κειμένου είναι το JTextField με το οποίο μπορούμε να διαχειριστούμε μία γραμμή κειμένου. Το JTextField δημιουργείται με τους παρακάτω δομητές: ΔΟΜΗΤΗΣ ΠΕΡΙΓΡΑΦΗ JTextField() JTextField(int cols) JTextField(String str) JTextField(String str, int cols) JTextField(Document model, String str, int cols) Δημιουργεί ένα άδειο JTextField. Δημιουργεί ένα JTextField με πλάτος cols. Δημιουργεί ένα JTextField το οποίο περιέχει το αλφαρηθμιτικό str. Δημιουργεί ένα JTextField το οποίο περιέχει το αλφαριθμητικό str και έχει πλάτος cols. Δημιουργεί ένα JTextField ακολουθώντας το μοντέλο model, περιέχει το αλφαριθμητικό str και έχει πλάτος cols. Δρ. Κεραμόπουλος Ευκλείδης 9

το JTextField ακολουθεί το PlainDocument μοντέλο. το JTextField δημιουργεί ένα ActionEvent γεγονός όταν πατείτε ένα πλήκτρο (το ENTER είναι το default) το οποίο το ακούει ένας ActionListener ακροατής και υλοποιείται στη μέθοδο ActionPerformed. Με τη μέθοδο void setactioncommand(string cmd); μπορούμε να ορίσουμε ένα χαρακτηριστικό όνομα όταν δημιουργείται ActionEvent γεγονός από κάποιο JTextField. Έχοντας ορίσει χαρακτηριστικά ονόματα μπορούμε να διαχειριστούμε γεγονότα από πολλά JTextField. Με τη μέθοδο από το πακέτο java.awt Font getfont() επιστρέφεται το font που έχει το κείμενο ενώ με τη μέθοδο void setfont(font newfont) ορίζει ένα νέο font για το κείμενο, π.χ JTextField.setFont(new Font( arial, Font.BOLD, 20)); Δρ. Κεραμόπουλος Ευκλείδης 10

θα γίνει χρήση των λειτουργιών cut και paste ενός κειμένου είτε μέσω των JButtons αλλά και των συντομεύσεων CTRL-X και CTRL-V. Δρ. Κεραμόπουλος Ευκλείδης 11

1. package ADX_project1; 2. import java.awt.*; 3. import java.awt.event.*; 4. import javax.swing.*; 5. import javax.swing.event.*; 6. class JTextFieldDemo { 7. JLabel jlaball; 8. JLabel jlabselected; 9. JTextField jtf; 10. JButton jbtncut; 11. JButton jbtnpaste; 12. public JTextFieldDemo() { 13. JFrame jfrm = new JFrame("Use JTextField"); 14. jfrm.setlayout(new FlowLayout()); 15. jfrm.setsize(200, 150); 16. jfrm.setdefaultcloseoperation(jframe.exit_on_close); 17. jlaball = new JLabel("All text: "); 18. jlabselected = new JLabel("Selected text: "); 19. jtf = new JTextField("This is a test.", 15); Το μέγεθος του jtf είναι 15. Δρ. Κεραμόπουλος Ευκλείδης 12

20. jtf.addactionlistener(new ActionListener() { 21. public void actionperformed(actionevent le) { 22. jlaball.settext("all text: " + jtf.gettext()); 23. jlabselected.settext("selected text: " + jtf.getselectedtext()); 24. } 25. }); Όταν πατείτε ENTER μέσα στο συστατικό κειμένου jtf τότε με τη μέθοδο gettext() παίρνουμε όλο το κείμενο του jtf. Με τη μέθοδο getselectedtext() παίρνουμε μόνο το επιλεγμένο κείμενο. 26. jbtncut = new JButton("Cut"); 27. jbtnpaste = new JButton("Paste"); 28. jbtncut.addactionlistener(new ActionListener() { 29. public void actionperformed(actionevent le) { 30. jtf.cut(); 31. jlaball.settext("all text: " + jtf.gettext()); 32. jlabselected.settext("selected text: " + jtf.getselectedtext()); 33. } 34. }); Όταν πατείτε το πλήκτρο CUT τότε αφαιρείται το επιλεγμένο κείμενο του συστατικού jtf με τη μέθοδο cut() και τοποθετείται στο clipoard. 35. jbtnpaste.addactionlistener(new ActionListener() { 36. public void actionperformed(actionevent le) { 37. jtf.paste(); 38. } 39. }); Όταν πατείτε το πλήκτρο PASTE τότε επικολλείται το κείμενο που βρίσκεται στο clipboard στο σημείο που βρίσκεται ο CARET μέσα στο συστατικό jtf Δρ. Κεραμόπουλος Ευκλείδης 13

40. jtf.addcaretlistener(new CaretListener() { 41. public void caretupdate(caretevent ce) { 42. jlaball.settext("all text: " + jtf.gettext()); 43. jlabselected.settext("selected text: " + jtf.getselectedtext()); 44. } 45. }); Κάθε φορά που μετακινείται ο CARET ενεργοποιείται αυτό το γεγονός και εμφανίζει την τρέχουσα κατάσταση στις ετικέτες. 46. jfrm.add(jtf); 47. jfrm.add(jbtncut); 48. jfrm.add(jbtnpaste); 49. jfrm.add(jlaball); 50. jfrm.add(jlabselected); 51. jtf.setcaretposition(5); 52. jtf.movecaretposition(7); 53. jfrm.setvisible(true); 54. } Τοποθετεί τον caret στη θέση 5. Μετά τον τοποθετεί στη θέση 7. Αυτόματα επιλέγεται το κείμενο στις θέσεις 6 και 7. 55. public static void main(string args[]) { 56. SwingUtilities.invokeLater(new Runnable() { 57. public void run() { 58. new JTextFieldDemo(); 59. } 60. }); 61. } 62. } Δρ. Κεραμόπουλος Ευκλείδης 14

Το JPasswordField είναι υποτάξη του JTextField. Έχει σχεδιασθεί έτσι ώστε να εμφανίζονται * αντί για το κείμενο που εισάγεται για λόγους ασφαλείας. Επίσης, για λόγους ασφαλείας δεν μπορούμε να χρησιμοποιήσουμε τις μεθόδους cut(), copy(), paste(), gettext(). Αντί αυτών χρησιμοποιούμε τη μέθοδο char[ ] getpassword() η οποία επιστρέφει έναν πίνακα χαρακτήρων. Με τη μέθοδο void setechochar() είναι δυνατόν να αλλάξει το * με άλλο σύμβολο. Δρ. Κεραμόπουλος Ευκλείδης 15

JPasswordField() ΔΟΜΗΤΗΣ ΠΕΡΙΓΡΑΦΗ Δημιουργεί ένα άδειο JPasswordField. JPasswordField(int cols) JPasswordField(String str) JPasswordField(String str, int cols) JPasswordField(Document model, String str, int cols) Δημιουργεί ένα JPasswordField με πλάτος cols. Δημιουργεί ένα JPasswordField το οποίο περιέχει το αλφαριθμητικό str. Δημιουργεί ένα JPasswordField το οποίο περιέχει το αλφαριθμητικό str και έχει πλάτος cols. Δημιουργεί ένα JPasswordField ακολουθώντας το μοντέλο model, περιέχει το αλφαριθμητικό str και έχει πλάτος cols. Δρ. Κεραμόπουλος Ευκλείδης 16

Δρ. Κεραμόπουλος Ευκλείδης 17

1. package ADX_project1; 2. import java.awt.*; 3. import java.awt.event.*; 4. import javax.swing.*; 5. import java.util.*; 6. class JPasswordFieldDemo { 7. JLabel jlabpw; 8. JPasswordField jpswd; Δημιουργεί ένα άδειο JPasswordField 9. public JPasswordFieldDemo() { 10. JFrame jfrm = new JFrame("Use JPasswordField"); 11. jfrm.setlayout(new FlowLayout()); 12. jfrm.setsize(240, 100); 13. jfrm.setdefaultcloseoperation(jframe.exit_on_close); 14. jlabpw = new JLabel("Enter Password"); 15. jpswd = new JPasswordField(15); Ορίζεται πλάτος 15 Δρ. Κεραμόπουλος Ευκλείδης 18

17. jpswd.addactionlistener(new ActionListener() { 18. public void actionperformed(actionevent le) { 19. char pw[] = { 't', 'e', 's', 't' }; 20. char [] userseq = jpswd.getpassword(); 21. if(arrays.equals(userseq, pw)) 22. jlabpw.settext("password Valid"); 23. else 24. jlabpw.settext("password Invalid -- Try Again"); 25. Arrays.fill(pw, (char) 0); 26. Arrays.fill(userSeq, (char) 0); 27. } 28. }); Γίνεται έλεγχος αν μπήκε το σωστό password και εμφανίζεται το αντίστοιχο μήνυμα. 29. jfrm.add(jpswd); 30. jfrm.add(jlabpw); 31. jfrm.setvisible(true); 32. } 33. public static void main(string args[]) { 34. SwingUtilities.invokeLater(new Runnable() { 35. public void run() { 36. new JPasswordFieldDemo(); 37. } 38. }); 39. } 40. } Δρ. Κεραμόπουλος Ευκλείδης 19

Το JFormattedTextField δημιουργεί κείμενο με συγκεκριμένη μορφοποίηση. Δομητές του JFormattedTextField είναι οι παρακάτω: JFormattedTextField() ΔΟΜΗΤΗΣ JFormattedTextField(Object contents) JFormattedTextField(Format frt) JFormattedTextField( JFormattedTextField. AbstractFormatter absfmt) JFormattedTextField( JFormattedTextField. AbstractFormattedFactory absfmtfact) JFormattedTextField( JFormattedTextField. AbstractFormattedFactory absfmtfact, Object contents) ΠΕΡΙΓΡΑΦΗ Δημιουργεί ένα άδειο JFormattedTextField χωρίς ορισμένη μορφοποίηση. Δημιουργεί ένα JFormattedTextField το οποίο εμφανίζει το κείμενο που περιέχεται στο contents με την εμφάνιση που έχει οριστεί στο contents. Δημιουργεί ένα άδειο JFormattedTextField το οποίο χρησιμοποιεί για την εμφάνιση το frt Δημιουργεί ένα άδειο JFormattedTextField το οποίο χρησιμοποιεί για την εμφάνιση το absfmt Δημιουργεί ένα άδειο JFormattedTextField το οποίο χρησιμοποιεί για την εμφάνιση το absfmtfact Δημιουργεί ένα JFormattedTextField το οποίο χρησιμοποιεί για την εμφάνιση το absfmtfact και περιέχει το κείμενο που φαίνεται στο contents. Δρ. Κεραμόπουλος Ευκλείδης 20

Όταν χρησιμοποιούμε το δομητή JFormattedTextField(Object contents) τότε αυτόματα δημιουργείται ένα αντικείμενο AbstractFormattedFactory το οποίο βασίζεται στο αντικείμενο παράμετρο contents. Παράδειγμα: JFormattedTextField jtf = new JFormattedTextField(10000); θα εμφανισθεί ο αριθμός 10000 σε μορφή 10.000 με άλλα λόγια αυτόματα θα ορισθεί η κλασική εμφάνιση των ακεραίων Δρ. Κεραμόπουλος Ευκλείδης 21

Εξασφαλίζουμε την εμφάνιση όπως ακριβώς τη θέλουμε με χρήση του δομητή JFormattedTextField(Format frt) Το Format είναι μία αφηρημένη τάξη με την οποία ορίζεται η εμφάνιση του κειμένου. Η Java Swing προσφέρει δύο τύπους Format: DateFormat και NumberFormat Δρ. Κεραμόπουλος Ευκλείδης 22

Χρησιμοποιούμε τη μέθοδο static final DateFormat getdateinstance(int datestyle) για να ορίσουμε πως θα εμφανίζεται η ημερομηνία του κειμένου To datestyle παίρνει τις τιμές 1. DateFormat.SHORT π.χ. 10/11/2009 2. DateFormat.MEDIUM π.χ. Νοε 10, 2009 3. DateFormat.LONG π.χ. 10 Νοέμβριος 2009 4. DateFormat.FULL π.χ. Δευτέρα, 10 Νοέμβριος 2009 Δρ. Κεραμόπουλος Ευκλείδης 23

Χρησιμοποιούμε τη μέθοδο static final NumberFormat getcurrencyinstance() για να ορίσουμε πως θα εμφανίζονται πεδία που περιέχουν χρήματα. Χρησιμοποιεί τις παραμέτρους του λειτουργικού για την εμφάνιση. Για παράδειγμα το ποσό 7000 θα εμφανισθεί 7.000,00 Δρ. Κεραμόπουλος Ευκλείδης 24

Μπορούμε να ορίσουμε την εμφάνιση κειμένου όπως ακριβώς θέλουμε με χρήση της τάξης MaskFormatter. H MaskFormatter είναι υποτάξη της JFormattedTextField.AbstractFormatter και επομένως θα πρέπει να χρησιμοποιήσουμε τον τέταρτο δομητή. JFormattedTextField(JFormattedTextField. AbstractFormatter absfmt) Δρ. Κεραμόπουλος Ευκλείδης 25

Για να ορίσουμε ένα αντικείμενο MaskFormatter χρησιμοποιούμε το δομητή: MaskFormatter(String fmtmask); To fmtmask ορίζει ποιοι χαρακτήρες μπορούν να εισαχθούν στο κείμενο και με ποια εμφάνιση, ανάλογα με τις παρακάτω τιμές: Α Αλφαριθμητικό Η Δεκαεξαδικό L Γράμματα τα οποία εμφανίζονται μικρά U Γράμματα τα οποία εμφανίζονται κεφαλαία # Αριθμοί * Όλοι οι χαρακτήρες? Όλα τα γράμματα άλλα σύμβολα Δρ. Κεραμόπουλος Ευκλείδης 26

Παράδειγμα MaskFormatter mf = new MaskFormatter("ID: AA-LL-UU"); jftfempid = new JFormattedTextField(mf); jftfempid.setvalue("id: as-io-oi"); Αποτέλεσμα Το MaskFormatter μπορεί να οδηγήσει σε ParseException, οπότε χρήσιμο είναι τον σχετικό κώδικα να τον ελέγχετε για αντίστοιχα λάθη. Δρ. Κεραμόπουλος Ευκλείδης 27

Στο JTextFormattedTextField δημιουργείται ένα ActionEvent γεγονός με το ENTER. Επίσης, δημιουργείται και ένα PropertyChangeEvent γεγονός, το οποίο το «ακούει» ο ακροατής PropertyChangeListener και το διαχειρίζεται η μέθοδος propertychange() To PropertyChangeEvent δημιουργείται γιατί όταν καταχωρούμε κείμενο σε ένα JTextFormattedTextField τότε θα πρέπει να πατήσουμε το πλήκτρο ENTER ή να επιλέξουμε κάποιο άλλο συστατικό για να μορφοποιηθεί το κείμενο σύμφωνα με τη μορφοποίηση που έχουμε ορίσει. Δρ. Κεραμόπουλος Ευκλείδης 28

Δρ. Κεραμόπουλος Ευκλείδης 29

1. package ADX_project1; 2. import java.beans.*; 3. import java.awt.*; 4. import java.awt.event.*; 5. import javax.swing.*; 6. import java.text.*; 7. import javax.swing.text.*; 8. import java.util.*; 9. class FormattedTFDemo { 10. NumberFormat cf; 11. DateFormat df; 12. JLabel jlab; 13. JFormattedTextField jftfsalary; 14. JFormattedTextField jftfdate; 15. JFormattedTextField jftfempid; 16. JButton jbtnshow; Ορίζουμε ένα αντικείμενο NumberFormat και ένα DateFormat Ορίζουμε τρία αντικείμενα JTextField Δρ. Κεραμόπουλος Ευκλείδης 30

17. public FormattedTFDemo() { 18. JFrame jfrm = new JFrame("JFormattedTextField"); 19. jfrm.setlayout(new FlowLayout()); 20. jfrm.setsize(240, 270); 21. jfrm.setdefaultcloseoperation(jframe.exit_on_close); 22. jlab = new JLabel(); 23. try { 24. MaskFormatter mf = new MaskFormatter("##-###"); 25. jftfempid = new JFormattedTextField(mf); 26. } catch (ParseException exc) { 27. System.out.println("Invalid Format"); 28. return; 29. } 30. jftfempid.setcolumns(15); 31. jftfempid.setvalue("24-895"); To μέγιστο μήκος του συστατικού θα είναι 15 Ορίζουμε μία τιμή με βάση το mf Μέσα σε ένα try catch για να διαχειριστούμε τα ParseException ορίζουμε ένα JFormattedTextField το οποίο θα δέχεται αριθμούς στη μορφή ## - ### 32. cf = NumberFormat.getCurrencyInstance(); 33. cf.setmaximumintegerdigits(5); 34. cf.setmaximumfractiondigits(2); 35. jftfsalary = new JFormattedTextField(cf); 36. jftfsalary.setcolumns(15); 37. jftfsalary.setvalue(new Integer(7000)); Ορίζουμε ένα JFormattedTextField για να εμφανίζει ένα αριθμό με χρηματική αναπαράσταση. Δρ. Κεραμόπουλος Ευκλείδης 31

38. df = DateFormat.getDateInstance(DateFormat.MEDIUM); 39. jftfdate = new JFormattedTextField(df); 40. jftfdate.setcolumns(15); 41. jftfdate.setvalue(new Date()); Ορίζουμε ένα JFormattedTextField για να εμφανίζει μία ημερομηνία με το τύπο MEDIUM. 42. jftfempid.addpropertychangelistener("value", new PropertyChangeListener() { 43. public void propertychange(propertychangeevent pe) { 44. jlab.settext("employee ID changed."); 45. } 46. }); 47. 48. jftfsalary.addpropertychangelistener("value", new PropertyChangeListener() { 47. public void propertychange(propertychangeevent pe) { 48. jlab.settext("monthly salary changed."); 49. } 50. }); 51. jftfdate.addpropertychangelistener("value", new PropertyChangeListener() { 52. public void propertychange(propertychangeevent pe) { 53. jlab.settext("date hired changed."); 54. } 55. }); όποτε αλλάζει το κείμενο σε κάποιο από τα τρία JTextFormmatted Field τότε ενημερώνεται η αντίστοιχη ετικέτα. Δρ. Κεραμόπουλος Ευκλείδης 32

56. jbtnshow = new JButton("Show Updates"); 57. jbtnshow.addactionlistener(new ActionListener() { 58. public void actionperformed(actionevent le) { 59. jlab.settext("<html>employee ID: " + jftfempid.getvalue() + 60. "<br>monthly Salary: " + cf.format(jftfsalary.getvalue()) + 61. "<br>date Hired: " + df.format(jftfdate.getvalue())); 62. } 63. }); Το νέο κείμενο εμφανίζεται στην ετικέτα jlab με χρήση HTML 64. jfrm.add(new JLabel("Employee ID")); 65. jfrm.add(jftfempid); 66. jfrm.add(new JLabel("Monthly Salary")); 67. jfrm.add(jftfsalary); 68. jfrm.add(new JLabel("Date Hired")); 69. jfrm.add(jftfdate); 70. jfrm.add(jbtnshow); 71. jfrm.add(jlab); 72. jfrm.setvisible(true); 73. } Δρ. Κεραμόπουλος Ευκλείδης 33

74. public static void main(string args[]) { 75. SwingUtilities.invokeLater(new Runnable() { 76. public void run() { 77. new FormattedTFDemo(); 78. } 79. }); 80. } 81. } Δρ. Κεραμόπουλος Ευκλείδης 34

Με το συστατικό JTextArea μπορούμε να δημιουργήσουμε ένα απλό κείμενο με πολλές γραμμές. Το JTextArea δεν υποστηρίζει κύλιση, γι αυτό θα πρέπει να το τοποθετήσουμε μέσα σε ένα JScrollPane για να έχουμε κύλιση όταν δεν φαίνεται όλο το κείμενο. (Στo NetBeans δημιουργείται αυτόματα μέσα σε JScrollPane) Το JTextArea δημιουργεί γεγονότα σχετικά με το caret. Δρ. Κεραμόπουλος Ευκλείδης 35

Σε ένα JTextArea μπορούμε να χρησιμοποιήσουμε τις μεθόδους που κληρονομούνται από το JTextComponent. Επίσης, μπορούμε να ορίσουμε αν θα διπλώνεται το κείμενο σε επόμενη σειρά με τις μεθόδους: void setlinewrap(boolean wrapon) Αν το wrapon είναι true τότε θα διπλώνεται το κείμενο αυτόματα. To false είναι το default. Boolean getlinewrap() Επιστρέφει την κατάσταση αναδίπλωσης. void setwrapstyleword(boolean BreakOnWords); Όταν είναι true τότε το κείμενο διπλώνεται στο τέλος μίας λέξης αλλιώς «σπάει τη λέξη». To false είναι το default. Δρ. Κεραμόπουλος Ευκλείδης 36

Οι δομητές που χρησιμοποιούμε για να δημιουργήσουμε ένα συστατικό JTextArea είναι: ΔΟΜΗΤΗΣ JTextArea() JTextArea(String str) JTextArea(int Rows, int Cols) JTextArea(String str, int Rows, int Cols) JTextArea(Document model) ΠΕΡΙΓΡΑΦΗ Δημιουργεί ένα άδειο JTextArea Δημιουργεί ένα JTextArea το οποίο αρχικά περιέχει το κείμενο str. Δημιουργεί έναjtextarea με διαστάσεις RowsXCols Δημιουργεί ένα JTextArea το οποίο αρχικά περιέχει το κείμενο str και έχει διαστάσεις RowsXCols. Δημιουργεί ένα JTextArea βασισμένο στο μοντέλο model. Δρ. Κεραμόπουλος Ευκλείδης 37

Μετράει τις λέξεις κάθε φορά που μετακινείται ο caret. Δρ. Κεραμόπουλος Ευκλείδης 38

1. package ADX_project1; 2. import java.awt.*; 3. import javax.swing.*; 4. import javax.swing.event.*; 5. class SimpleTextAreaDemo { 6. JLabel jlabwc; 7. JTextArea jta; Δηλώνεται ένα JTextArea αντικείμενο 8. public SimpleTextAreaDemo() { 9. JFrame jfrm = new JFrame("A Simple JTextArea"); 10. jfrm.setlayout(new FlowLayout()); 11. jfrm.setsize(240, 150); 12. jfrm.setdefaultcloseoperation(jframe.exit_on_close); 13. jlabwc = new JLabel("Current word count is 0"); 14. jta = new JTextArea(); 15. jta.setlinewrap(true); 16. jta.setwrapstyleword(true); 17. JScrollPane jscrlp = new JScrollPane(jta); 18. jscrlp.setpreferredsize(new Dimension(100, 75)); Δημιουργείται ένα άδειο JTextArea αντικείμενο το οποίο διπλώνεται στο τέλος μιας λέξης και το βάζουμε μέσα σε ένα JScrollPane Δρ. Κεραμόπουλος Ευκλείδης 39

19. jta.addcaretlistener(new CaretListener() { 20. public void caretupdate(caretevent ce) { 21. int wc; 22. String str = jta.gettext(); 23. if(str.length() == 0) 24. wc = 0; 25. else { 26. String [] strsplit = str.split("\\w+"); 27. wc = strsplit.length; 28. if(strsplit.length > 0 && 29. strsplit[0].length() == 0) wc--; 30. } 31. jlabwc.settext("current word count is " + wc); 32. } 33. }); Κάθε φορά που κινείται ο caret μετράει τις λέξεις. Με τη μέθοδο split() σπάει το string σε substrings με διαχωριστικό κάθε σύμβολο που δεν είναι χαρακτήρας. Αυτό δηλώνεται με το regular expression "\\W+" 34. jfrm.add(jscrlp); 35. jfrm.add(jlabwc); 36. jfrm.setvisible(true); 37. } 38. public static void main(string args[]) { 39. SwingUtilities.invokeLater(new Runnable() { 40. public void run() { 41. new SimpleTextAreaDemo(); 42. } 43. }); Δρ. Κεραμόπουλος Ευκλείδης 40

void settabsize(int newsize) Ορίζουμε πόσους χαρακτήρες μετακινείται ο caret με το ΤΑΒ. void append(string str) Προσθέτει το κείμενο str στο τέλος του κειμένου. void insert(string str, int idx) Προσθέτει το κείμενο str στη θέση idx του κειμένου. void replacerange(string str, int begin, int end) Αλλάζει με το κείμενο str το κείμενο που βρίσκεται από τη θέση begin μέχρι τη θέση end του κειμένου. int getlinecount() Μετράει τις παραγράφους που περιέχει το κείμενο. Γραμμές που τελειώνουν με newline (ENTER ή RETURN). Δρ. Κεραμόπουλος Ευκλείδης 41

Δημιουργεί έναν απλό επεξεργαστή κειμένου. Οι λειτουργίες που περιέχει είναι αποθήκευση και άνοιγμα αρχείου, αποκοπή, επικόλληση και εύρεση. Δρ. Κεραμόπουλος Ευκλείδης 42

1. package ADX_project1; 2. import java.io.*; 3. import java.awt.*; 4. import java.awt.event.*; 5. import javax.swing.*; 6. import javax.swing.event.*; 7. class SimpleTextEditor { 8. JLabel jlabmsg; 9. JTextArea jta; 10. JTextField jtffname; 11. JTextField jtffind; 12. JButton jbtnsave; 13. JButton jbtnload; 14. JButton jbtnfind; 15. JButton jbtnfindnext; 16. int findidx; Δημιουργεί τα συστατικά που θα χρησιμοποιήσουμε Δρ. Κεραμόπουλος Ευκλείδης 43

17. public SimpleTextEditor() { 18. JFrame jfrm = new JFrame("A Simple Text Editor"); 19. jfrm.setlayout(new FlowLayout()); 20. jfrm.setsize(270, 420); 21. jfrm.setdefaultcloseoperation(jframe.exit_on_close); 22. jlabmsg = new JLabel(); 23. jlabmsg.setpreferredsize(new Dimension(200, 30)); 24. jlabmsg.sethorizontalalignment(swingconstants.center); 25. JLabel jlabseparator = new JLabel(); 26. jlabseparator.setpreferredsize(new Dimension(200, 30)); 27. JLabel jlabfind = new JLabel("Search For:"); 28. jlabfind.setpreferredsize(new Dimension(70, 20)); 29. jlabfind.sethorizontalalignment(swingconstants.right); 30. JLabel jlabfilename = new JLabel("Filename:"); Ορίζει τις ετικέτες όλων των ενεργητικών συστατικών 31. jlabfilename.setpreferredsize(new Dimension(70, 20)); 32. jlabfilename.sethorizontalalignment(swingconstants.right); 33. jta = new JTextArea(); 34. JScrollPane jscrlp = new JScrollPane(jta); 35. jscrlp.setpreferredsize(new Dimension(250, 200)); 36. jtffname = new JTextField(15); Ορίζει ένα JTextArea μέσα σε JScrollPane χωρίς να επιτρέπεται η αναδίπλωση του κειμένου Δρ. Κεραμόπουλος Ευκλείδης 44

37. jta.addcaretlistener(new CaretListener() { 38. public void caretupdate(caretevent ce) { 39. String str = jta.gettext(); 40. jlabmsg.settext("current size: " + str.length()); 41. findidx = jta.getcaretposition(); 42. } 43. }); Κάθε φορά που μετακινείται ο caret βρίσκει τον αριθμό των χαρακτήρων του κειμένου και ορίζει τη μεταβλητή findidx στη θέση του caret. 44. jbtnsave = new JButton("Save File"); 45. jbtnload = new JButton("Load File"); 46. jbtnsave.addactionlistener(new ActionListener() { 47. public void actionperformed(actionevent le) { 48. save(); 49. } 50. }); 51. jbtnload.addactionlistener(new ActionListener() { 52. public void actionperformed(actionevent le) { 53. load(); 54. } 55. }); Δρ. Κεραμόπουλος Ευκλείδης 45

56. jtffind = new JTextField(15); 57. jbtnfind = new JButton("Find From Top"); 58. jbtnfindnext = new JButton("Find Next"); 59. jbtnfind.addactionlistener(new ActionListener() { 60. public void actionperformed(actionevent le) { 61. findidx = 0; 62. find(findidx); 63. } 64. }); 65. jbtnfindnext.addactionlistener(new ActionListener() { 66. public void actionperformed(actionevent le) { 67. find(findidx+1); 68. } 69. }); Δρ. Κεραμόπουλος Ευκλείδης 46

70. Container cp = jfrm.getcontentpane(); 71. cp.add(jscrlp); 72. cp.add(jlabfind); 73. cp.add(jtffind); 74. cp.add(jbtnfind); 75. cp.add(jbtnfindnext); 76. cp.add(jlabseparator); 77. cp.add(jlabfilename); 78. cp.add(jtffname); 79. cp.add(jbtnsave); 80. cp.add(jbtnload); 81. cp.add(jlabmsg); 82. jfrm.setvisible(true); 83. } Δρ. Κεραμόπουλος Ευκλείδης 47

84. void save() { 85. FileWriter fw; 86. String fname = jtffname.gettext(); 87. if(fname.length() == 0) { 88. jlabmsg.settext("no filename present."); 89. return; 90. } 91. try { 92. fw = new FileWriter(fname); 93. jta.write(fw); 94. fw.close(); 95. } catch(ioexception exc) { 96. jlabmsg.settext("error opening or writing file."); 97. return; 98. } 99. jlabmsg.settext("file written successfully."); 100. } Η μέθοδος αποθήκευσης. Ελέγχει αν το όνομα που περιέχει το jtffname έχει τιμή. Αν έχει τότε χρησιμοποιεί τη μέθοδο write για να γράψει στο αρχείο όλο το περιεχόμενο του συστατικού JTextArea jta Δρ. Κεραμόπουλος Ευκλείδης 48

101. void load() { 102. FileReader fw; 103. String fname = jtffname.gettext(); 104. if(fname.length() == 0) { 105. jlabmsg.settext("no filename present."); 106. return; 107. } 108. try { 109. fw = new FileReader(fname); 110. jta.read(fw, null); 111. fw.close(); 112. } catch(ioexception exc) { 113. jlabmsg.settext("error opening or reading file."); 114. return; 115. } 116. findidx = 0; 117. jlabmsg.settext("file loaded successfully."); 118. } Η μέθοδος ανοίγματος ενός αρχείου. Ελέγχει αν το όνομα που περιέχει το jtffname έχει τιμή. Αν έχει τότε χρησιμοποιεί τη μέθοδο read για τοποθετήσει το κείμενο που περιέχει το αρχείο στο συστατικό JTextArea jta Δρ. Κεραμόπουλος Ευκλείδης 49

120. void find(int start) { 121. String str = jta.gettext(); 122. String findstr = jtffind.gettext(); 123. int idx = str.indexof(findstr, start); 124. if(idx > -1) { 125. jta.setcaretposition(idx); 126. findidx = idx; 127. jlabmsg.settext("string found."); 128. } 129. else 130. jlabmsg.settext("string not found."); 131. jta.requestfocusinwindow(); 132. } Η μέθοδος εύρεσης. Η μέθοδος str.indexof(αλφαριθμητικό, θέση) επιστρέφει που βρίσκει για πρώτη φορά το αλφαριθμητικό μέσα στο str ξεκινώντας από τη θέση θέση. Επιστρέφει -1 αν δεν βρει τίποτα 133. public static void main(string args[]) { 134. SwingUtilities.invokeLater(new Runnable() { 135. public void run() { 136. new SimpleTextEditor(); 137. } 138. }); 139. } 140. } Δρ. Κεραμόπουλος Ευκλείδης 50

επόμενη ενότητα