BETA

Μαθαίνοντας την Java-Χρησιμοποιώντας το JOptionPane CLASS [μάθημα 12]

Εικόνα Michail

Συνεχίζουμε τα μαθήματα εκμάθησης της Java, έχοντας ήδη κάνει το πρώτο εισαγωγικό μάθημα και έχοντας δει,πως μπορουμε να εγκαταστήσουμε το NetBeans, προκειμένου να δημιουργήσουμε τις εφαρμογές μας και στη συνεχεια δημιουργώντας την πρωτη μας εφαρμογή.
Έχοντας δει κιόλας, σχετικά με τα LANGUAGE FUNDAMENTALS και στη συνέχεια, Ονομασία Μεταβλητών, και τα INTEGER TYPES, καθώς και τα Floating Point Types, μα και καθορισμό των Boolean και Char Data types, καθώς και για τα Arrays και την εισαγωγή δεδομένων μέσω κλάσης Scanner, συνεχίζουμε με το 11ο μάθημα της σειράς.
[box color=blue]Σε αυτή την φάση για τα εκπαιδευτικά μαθήματα χρησιμοποιούμε το λειτουργικό σύστημα Windows, μα οι διαφορές είναι ελάχιστες, ως μηδαμινές και στα υπόλοιπα λειτουργικά[/box]
-Στο σημερινό μάθημα θα ασχοληθούμε με τον γραφικό τρόπο εισαγωγής δεδομένων στην Java. Θεωρώ σωστό αυτή την χρονική στιγμή να αυξήσουμε λίγο περισσότερο την προγραμματιστική μας γνώση στην Java, προσφέροντας με απλό γραφικό τρόπο την δυνατότητα στον χρήστη να εισάγει τιμές όσο και να λαμβάνει το αποτέλεσμα μιας πράξης σε παραθυρικό περιβάλλον στην οθόνη του.
Το πρόγραμμα που θα γράψουμε θα είναι εύκολο στην λογική και στην σύνταξη του έτσι ώστε να συγκεντρώσουμε την προσοχή μας στην νέες εντολές που ενεργοποιούν το παραθυρικό περιβάλλον με το οποίο αλληλεπιδρά ο χρήστης.

Στο πρώτο παράδειγμα θα αναλύσουμε την δομή ενός εύκολου για την εμπειρία μας προγράμματος Java.
Μετά θα το αναβαθμίσουμε έτσι ώστε το αποτέλεσμα να παρουσιάζεται με γραφικό περιβάλλον στον χρήστη. Τέλος θα ολοκληρώσουμε την εφαρμογή μας προσθέτοντας τον απαραίτητο κώδικα για να μπορεί ο χρήστης να εισάγει πάλι με γραφικό τρόπο τις ζητούμενες τιμές στο πρόγραμμα.

Το πρόγραμμα που παρουσιάζεται παρακάτω, υπολογίζει το εμβαδόν ενός κύκλου, βασιζόμενο στην τιμή της ακτίνας που έχουμε ορίσει με σταθερή τιμή μέσα στο κώδικα μας.
Το μειονέκτημα που έχει το συγκεκριμένο πρόγραμμα είναι η έλλειψη ευελιξίας όσο αφορά τον υπολογισμό του εμβαδού για διαφορετικές τιμές ακτίνων.
Θα πρέπει να επεμβαίνουμε συνέχεια στον αρχικό κώδικα για να ορίσουμε καινούργιες τιμές.
Ας εξηγήσουμε όμως την υπάρχουσα δομή του προγράμματος πριν επέμβουμε για να κάνουμε τις απαραίτητες αλλαγές:

Line 4 – Αρχικά ορίζουμε μια κλάση Circle. Το όνομα της κλάσης, όπως ήδη έχουμε αναφέρει στην θεωρία μας, θα είναι ίδιο με το όνομα του αρχείου που θα αποθηκευτεί στο σκληρό δίσκο. Η λέξη public καθορίζει το είδος πρόσβασης που έχουν άλλα στοιχεία στην κλάση (η ιδιότητα public δίνει την δυνατότητα σε οποιοδήποτε άλλο στοιχείο από την ίδια κλάση, το ίδιο πακέτο ή ακόμα από το ίδιο project να έχει πρόσβαση στην κλάση μας), και η λέξη κλειδί class ενημερώνει τον compiler ότι το αρχείο που θα δημιουργηθεί θα είναι μια κλάση.

Line 6 – Όταν μέσα στην κλάση μας περιέχομε και την μέθοδο main( ) τότε αυτόματα η κλάση μας γίνεται εκτελέσιμη. Αυτό σημαίνει ότι οτιδήποτε κώδικας γραφεί μέσα στην συγκεκριμένη μέθοδο (ανάμεσα στα άγκιστρα που ορίζουν τα όρια της), θα εκτελεστεί από το Runtime περιβάλλον της Java.

Line 8 – 9 : Ορίζουμε δυο μεταβλητές double με ονόματα radius και area αντίστοιχα. Δεν είναι απαραίτητο να αναθέσουμε από τώρα τιμές, αυτές θα προέλθουν αργότερα κατά την διάρκεια εκτέλεσης του προγράμματος.

Line 10: Αναθέτουμε στην μεταβλητή radius την αρχική τιμή 20.

Line 11: Τώρα που είναι γνωστή η τιμή της μεταβλητής radius, μπορούμε να ολοκληρώσουμε την πράξη. Το αποτέλεσμα του πολλαπλασιασμού θα ανατεθεί σε μια καινούργια μεταβλητή με το όνομα area.

Line 12-13: Εδώ απλά ζητάμε να δούμε την τελική τιμή της μεταβλητής area στην οθόνη μας μέσα από κάποιο ολοκληρωμένο σε έννοια μήνυμα
The area for the circle of radius θα εμφανιστεί όπως ακριβώς το δηλώσαμε μέσα στην μέθοδο println( ) γιατί περικλείεται μέσα σε διπλά “ “ σύμβολα που του δίνουν το χαρακτηριστικό του String.
Η μεταβλητή radius θα αντικατασταθεί από την τιμή 20 και θα εμφανιστεί κολλητά με το προηγούμενο μήνυμα.
Στην συνέχεια θα ακολουθήσει η λέξη is, και τέλος το αποτέλεσμα του πολλαπλασιασμού με το οποίο ισούται η μεταβλητή area.

Ας προχωρήσουμε όμως στην αναβάθμιση του προγράμματος.
Σαν πρώτο βήμα θα δώσουμε την δυνατότητα στο χρήστη να εισάγει την απαιτούμενη τιμή για το radius δια μέσου ενός απλού παραθυρικού περιβάλλοντος.
Πιο κάτω σας δίνεται το αναβαθμισμένο πρόγραμμα, με την επεξήγηση του:

Line 4: Σε κάθε πρόγραμμα java που εκτελούμε, δεν είναι απαραίτητη προϋπόθεση η φόρτωση όλων των διαθέσιμων βιβλιοθηκών γιατί απλά δεν ξέρουμε ποιες από αυτές θα χρησιμοποιηθούν.
Μέχρι τώρα, το πρόγραμμα μας δεν απαιτούσε τον ορισμό καμίας ιδιαίτερης βιβλιοθήκης γιατί εκτελούσε απλούς ρόλους. Έτσι και αλλιώς περιμένει από τον χρήστη να τις καλέσει ανάλογα με τις ανάγκες του κάθε προγράμματος.

Στο πρόγραμμα που μελετάμε, επειδή μας είναι ήδη γνωστό ότι θα χρησιμοποιήσουμε γραφικό τρόπο για να ζητήσουμε την εισαγωγή δεδομένων από τον χρήστη, πρέπει να δηλώσουμε εξ’ αρχής ποια βιβλιοθήκη θα πρέπει να υποστηρίξει την σωστή λειτουργία της εφαρμογής μας.
Ο compiler, στηριζόμενος στην βιβλιοθήκη που θα ορίσουμε, θα μπορέσει να μεταφράσει και να εκτελέσει σωστά τις εντολές που του μεταδίδουμε δια μέσου την χρήση μεθόδων.

Οι import εντολές πάντα δηλώνονται στην αρχή του προγράμματος, και αμέσως μετά από την εντολή package.
Αυτή η σειρά δήλωσης των εντολών είναι αμετάκλητη – package, import, class.
Για να ανακεφαλαιώσουμε, πρώτα δηλώνουμε το πακέτο στο οποίο ανήκει το πρόγραμμα μας, μετά τις αναγκαίες βιβλιοθήκες που θα υποστηρίξουν την εκτέλεση του προγράμματος και τέλος την κλάση η οποία θα περιέχει το κώδικα μας.

Η συγκεκριμένη import εντολή φορτώνει από το πακέτο γραφικών swing την κλάση JOptionPane
Η συγκεκριμένη κλάση μας δίνει την δυνατότητα με τον πιο εύκολο προγραμματιστικά τρόπο να εμφανίσουμε ένα παράθυρο στο χρήστη είτε για να του ζητήσουμε κάποια εισαγωγή δεδομένων, είτε για να του παρουσιάσουμε κάποιο αποτέλεσμα.
Για να πετύχουμε το επιθυμητό αποτέλεσμα πρέπει να ορίσουμε και να εκτελέσουμε σωστά τις μεθόδους που η κλάση JOptionPane μας παρέχει για αυτό το σκοπό.
Συγκεκριμένα η μέθοδος showInputDialog( ) είναι εκείνη που παρέχει την δυνατότητα εισαγωγής δεδομένων, ενώ η showMessageDialog( ) είναι εκείνη που παρουσιάζει το αποτέλεσμα (και οι δύο θα χρησιμοποιηθούν στο πρόγραμμα μας).
Για μια ολοκληρωμένη γνώση της κλάσης JOptionPane και τις μεθόδους της μπορείτε να ανατρέξετε στο documentation της java.

Οποιαδήποτε άλλη γνώση για το συγκεκριμένο θέμα αυτή τη στιγμή είναι περιττή.
Μες τις λίγες γνώσεις που κατέχουμε μέχρι αυτό το σημείο θα ήταν δύσκολο να κατανοήσετε όλη την υποδομή των γραφικών δυνατοτήτων της Java.
Με την λίγη θεωρία που κατέχουμε όμως θα μπορέσουμε να εμπλουτίσουμε το πρόγραμμα μας και να το κάνουμε πολύ πιο περισσότερο φιλικό στον τελικό χρήστη από ότι ήταν μέχρι τώρα.

Line 10 – 12: Α dialog box είναι εκείνο το γραφικό πλαίσιο το οποίο δεν μπορούμε να διαχειριστούμε ούτε στο μέγεθός της εμφάνισης του, ούτε στον τρόπο παρουσίασης του.
Είναι κατά κάποιο τρόπο προκατασκευασμένο και έτοιμο για συγκεκριμένη λειτουργία, δίνοντας πολύ λίγη ευελιξία στον προγραμματιστή.
Από τις λίγες επιλογές που έχουμε να επιλέξουμε είναι ο αριθμός των κουμπιών τα οποία θα είναι διαθέσιμα (OK, CANCEL, κτλ) και το εικονίδιο που συνοδεύει το μήνυμα μας πχ σε ερώτημα προς το χρήστη θα είχαμε ένα εικονίδιο που αντιπροσωπεύει ένα ερωτηματικό, ενώ σε μια δήλωση προς τον χρήστη ένα εικονίδιο θαυμαστικού θα ήταν το καταλληλότερο:

Η πρώτη μέθοδος της JOptionPane που χρησιμοποιούμε είναι η showInputDialog και η οποία θα κάνει δυνατή την εισαγωγή δεδομένων ζητώντας στοιχεία από τον χρήστη. Η συγκεκριμένη μέθοδο για την σωστή λειτουργία της απαιτεί να οριστούν 4 παράμετροι (χωρίζονται με κόμμα) και οι οποίοι είναι οι εξής:

null – δηλώνει ότι το παρών παράθυρο δεν είναι μέρος κάποιου άλλου γενικότερου πλαισίου όπως πχ ενός άλλου frame ή window. Με άλλα λόγια ορίζοντας την πρώτη παράμετρο να έχει την τιμή null, δηλώνουμε ότι το παράθυρο που θα εμφανίζεται θα είναι αυτόνομο.

“Enter a double number for the radius”- Η δεύτερη παράμετρος της μεθόδου ορίζει τον μήνυμα που θα εμφανιστεί μέσα στο παράθυρο σαν επεξηγηματικό μήνυμα προς το χρήστη.

“Circle Example” – Η τρίτη παράμετρος ορίζει τον τίτλο που θα έχει το παράθυρο που θα εμφανιστεί.
Το συγκεκριμένο μήνυμα θα εμφανιστεί στο μπλε πλαίσιο στο πάνω μέρος του παραθύρου γνωστό ως title bar.

JOptionPane.QUESTION_MESSAGE – Η τέταρτη και τελευταία παράμετρος είναι αυτή που επιλέγει το σύμβολο που θα εμφανιστεί δίπλα από το μήνυμα μας. Το QUESTION_MESSAGE αντιπροσωπεύει το σύμβολο του ερωτηματικού.
Τα υπόλοιπα σύμβολα τα αντιπροσωπεύουν οι εντολές ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, και PLAIN_MESSAGE.

Εκτός από τις ποιο πάνω ρυθμίσεις που είναι απαραίτητες να οριστούν από τον προγραμματιστή, όλη η υπόλοιπη λειτουργικότητα του παραθύρου έχει ρυθμιστεί αυτόματα από την java και από την κλάση στην οποία ανήκει.
Προσπαθήστε να είσαστε όσο το δυνατόν πιο ακριβής με τα μηνύματα σας προς το χρήστη. Εάν πχ ζητάτε έναν αριθμό, στο μήνυμα σας θα πρέπει να εξηγείτε εάν ο αριθμός που θα εισάγει ο χρήστης θα είναι ακέραιος ή δεκαδικός.

Line 14: Είμαι σίγουρος ότι έχετε ήδη προσέξει ότι όλος ο κώδικας για το παράθυρο εισαγωγής βρίσκεται από την αριστερή πλευρά μιας ισότητας.
Με άλλα λόγια, η πληροφορία που θα εισάγει ο χρήστης θα ανατεθεί σε μία καινούργια μεταβλητή με το όνομα radius. Όμως η μεταβλητή έχει οριστεί να είναι String.
Ο λόγος είναι απλός – κάθε πληροφορία που λαμβάνουμε από το παραθυρικό πλαίσιο την δεχόμαστε σαν String.
Εάν η ζητούμενη πληροφορία είναι όνομα τότε δεν υπάρχει κανέναν απολύτως πρόβλημα.
Εάν όμως είναι αριθμός τότε θα πρέπει να προχωρήσουμε σε ένα ακόμα βήμα, που είναι η μετατροπή των χαρακτήρων σε πραγματικούς αριθμούς.
Και αυτό ακριβώς το βήμα δηλώνει η πιο πάνω εντολή.
Μέσα στην παρένθεση βρίσκεται η μεταβλητή που έχει σαν τιμή τα δεδομένα του χρήστη σε μορφή String (χαρακτήρων). Η εντολή Double.parseDouble έχει την ικανότητα να μετατρέπει έναν String αριθμό σε πραγματικό Double αριθμό (αρκεί φυσικά να είναι αναγνώσιμος σαν αριθμός). Υπάρχει και η αντίστοιχη εντολή Integer.parsInt για μετατροπή αριθμού από String σε Integer.
Ολοκληρώνοντας και αυτό το τελευταίο βήμα, το πρόγραμμα μας κατέχει τον πραγματικό Double αριθμό που έκανε εισαγωγή ο χρήστης οπότε μπορεί να εκτελεστεί χωρίς κανένα πρόβλημα.

Φτάνουμε λοιπόν στο τελευταίο μέρος του μαθήματος μας, που αναφέρεται στην ικανότητα που θέλουμε να προσθέσουμε στο πρόγραμμα μας να δείχνει με παραθυρικό τρόπο το αποτέλεσμα του υπολογισμού του εμβαδού του κύκλου στην οθόνη του χρήστη.
Αυτό που έχουμε να προσθέσουμε είναι απλά η δεύτερη μέθοδο (showMessageDialog) της JOptionPane κλάσης που αναφερθήκαμε στην αρχή του μαθήματος.
Ας δούμε όμως πως θα αναβαθμιστεί το πρόγραμμα μας πριν εξηγήσουμε τις νέες γραμμές κώδικα που θα προσθέσουμε.

Αυτό που πραγματικά κάναμε, είναι να αντικαταστήσουμε την println( ) μέθοδο με την showMessageDialog. Με άλλα λόγια το αποτέλεσμα του προγράμματος μας δεν θα παρουσιάζεται στην κονσόλα (DOS) αλλά μέσα σε παραθυρικό πλαίσιο.

Line 18- 20: Η σύνταξη της παραπάνω μεθόδου μοιάζει καταπληκτικά με την σύνταξη της showInputDialog που αναλύσετε πιο πάνω με την διαφορά ότι είναι πιο απλή στην δομή της επειδή δεν χρειάζεται να πραγματοποιηθεί καμία μετατροπή.
Οι παράμετροι τις οποίες δέχεται έχουν την ίδια ακριβώς επεξήγηση όπως και στην showInputDialog με την διαφορά ότι η δεύτερη παράμετρος αναφέρεται στο μήνυμα που θα δώσει την τελική απάντηση στο χρήστη.

Στο σημερινό μάθημα μελετήσαμε ένα απλό πρόγραμμα στο οποίο έχουμε την δυνατότητα να εισάγουμε δεδομένα αλλά και να πάρουμε απαντήσεις δια μέσου παραθυρικού περιβάλλοντος.
Από το επόμενο μάθημα θα συνεχίσουμε με την πιστή ανάλυσή μας στο on-line documentation της java.

Μιχάλης Κασάπογλου(http://kassapoglou.com)

  • Σχόλια

0 Comments:

Scroll to Top