Page 88 - Linux Inside τ. 9

Basic HTML Version

Linux Inside
88
σης σημαντική η αισθητική των παραθύρων της εφαρμογής.
Το WindowBuilder παρέχει μία σειρά από ευκολίες, όπως η
συγκράτηση widgets στο πλέγμα (grid) και η μεταξύ τους
στοίχιση. Για να δράσουμε σε πολλά widgets με σκοπό, π.χ.,
τη μετακίνησή τους ή την αλλαγή κάποιας κοινής ιδιότητας,
τα επιλέγουμε έχοντας πατημένο το πλήκτρο Ctrl
(εικόνα
3).
Λειτουργία του κώδικα
Ο πηγαίος κώδικας της εφαρμογής υπάρχει στο συνοδευ-
τικό DVD του περιοδικού (αρχείο holidates.java.text). Με τη
βοήθεια ενός editor αντιγράφουμε όλα τα περιεχόμενά του,
αντικαθιστώντας όλα τα περιεχόμενα του αρχείου
holidates.java στο project της εφαρμογής μας στο Eclipse.
Αφού πειραματιστούμε με την εκτέλεση της εφαρμογής και
τη χρήση του WindowBuilder, καλό είναι να δοκιμάσουμε τις
δυνάμεις μας σχεδιάζοντας το παράθυρο από την αρχή. Ο
παρεχόμενος κώδικας αφορά τόσο στη σχεδίαση του παρα-
θύρου όσο και στη λειτουργίας της εφαρμογής και είναι
έτοιμος για εκτέλεση. Είναι παράλληλα κατάλληλα σχολια-
σμένος ώστε να εξηγούνται όλες οι ενέργειες.
Ο κώδικας της εφαρμογής μας ξεκινά να εκτελείται από
τη μέθοδο main() της κλάσης holidates. Με κλήση των αντί-
στοιχων μεθόδων σχεδιάζεται και ανοίγει το βασικό και μο-
ναδικό παράθυρο της εφαρμογής μας, η λειτουργία του
οποίου εποπτεύεται διαρκώς, ώστε μόλις ο χρήστης κλείσει
το παράθυρο να τερματιστεί και η εκτέλεση της εφαρμογής.
Χρησιμοποιούμε ετικέτες (label) τόσο για την εμφάνιση των
επεξηγήσεων (λεζάντες) όσο και για την εμφάνιση των ημε-
ρομηνιών των αργιών.
Σε κάθε εφαρμογή Java με γραφική διεπαφή χρησιμοποι-
ούμε μία ιεραρχία αντικειμένων για την αναπαράσταση και
το χειρισμό των συστατικών της. Στο μοντέλο SWT ένας δια-
χειριστής παραθύρων (display) χειρίζεται τόσο τα γεγονότα
των παραθύρων (shell) όσο και την επικοινωνία τους με το
γραφικό περιβάλλον του λειτουργικού συστήματος
(εικόνα
4)
. Κάθε widget είναι ένα αντικείμενο που διαθέτει ιδιότητες
και μεθόδους. Με βάση τις αρχές της αντικειμενοστραφούς
σχεδίασης δεν είναι δυνατό να προσπελάσουμε άμεσα τις
ιδιότητες ενός αντικειμένου. Υπάρχουν όμως μέθοδοι για
τον ορισμό των τιμών των ιδιοτήτων. Έτσι όταν γράφουμε
στη γραμμή 83 του κώδικα: label_1.setText("Πρωτοχρονιά");
ουσιαστικά χρησιμοποιούμε τη μέθοδο setText() για να αλ-
λάξουμε την τιμή της ιδιότητας text του αντικειμένου label_1.
Συντακτικά η τελεία (.) παίζει εδώ το ρόλο του τελεστή πρό-
σβασης σε μέλος αντικειμένου. Εξετάζοντας τον κώδικα εί-
ναι εύκολο να καταλάβουμε τα ονόματα των περισσότερων
ιδιοτήτων των widgets, καθώς και τη λειτουργία τους. Η ιδιό-
τητα text, για παράδειγμα, καθορίζει το κείμενο μίας ετικέ-
τας. Ένα ακόμη συμπέρασμα είναι ότι κάθε κλάση αντικειμέ-
νων διαθέτει μία ομάδα μεθόδων που το όνομά τους ξεκινά
με set και χρησιμοποιούνται για την απόδοση τιμών σε ιδιό-
τητες των αντικειμένων, αλλά και μία ομάδα μεθόδων που
Linux Labs - Java
Η απόσταση που χωρίζει τη συγγραφή ενός άρ-
θρου από τη δημοσίευσή του είναι μεγάλη. Αυτό
έχει ως αποτέλεσμα να αλλάζουν αποθετήρια
και καταστάσεις με την πάροδο των εβδομάδων.
Για να είμαστε λοιπόν συνεπείς, περιγράφουμε
μία εναλλακτική διαδικασία για την εγκατάσταση
του περιβάλλοντος προγραμματισμού (JDK) και
εκτέλεσης (JRE) εφαρμογών Java, αλλά και του
επιπρόσθετου που επιτρέπει την εκτέλεση
applet μέσα από το περιβάλλον του φυλλομετρη-
τή μας. Πρέπει να επισημάνουμε ότι όταν εγκα-
θιστούμε το JDK, δεν απαιτείται εγκατάσταση
και του JRE. Αν βέβαια δεν επιθυμούμε να ανα-
πτύξουμε, αρκεί να εγκαταστήσουμε το JRE για
να μπορούμε μόνο να εκτελέσουμε εφαρμογές
Java.
Για να λειτουργήσει το Eclipse, απαιτείται το
JRE της Oracle (οι παλαιότερες εκδόσεις έχουν
το όνομα της Sun) ή της IBM. Εγκαθιστούμε
όμως το JDK (παρ’ όλο που δεν απαιτείται για
εκτέλεση απλών εφαρμογών μέσα από το
Eclipse), καθώς περιλαμβάνει και το JRE, αλλά
και το επιπρόσθετο (plug-in) για να εκτελούμε
applet. Εδώ περιγράφουμε τα βήματα για εγκα-
τάστασή του σε Ubuntu 10.04 με τη διαδικασία
να είναι παρόμοια για τις υπόλοιπες διανομές
[6].
Μεταβαίνουμε στην ιστοσελίδα λήψεων της
Java [7] για να κατεβάσουμε την τελευταία έκ-
δοση του Oracle JDK η οποία δεν διατίθεται, τον
καιρό που γράφεται το άρθρο, από κάποιο απο-
θετήριο. Από εκεί επιλέγουμε το κατάλληλο αρ-
χείο για τη διανομή μας (έστω το jdk-7u3-linux-
i586.tar.gz) και το κατεβάζουμε αφού πρώτα
αποδεχτούμε την άδεια χρήσης. Όταν κατέβει,
το αντιγράφουμε στο φάκελο που θέλουμε να
εγκαταστήσουμε το JDK (έστω /opt) και το απο-
συμπιέζουμε.
sudo cp jdk-7u3-linux-i586.tar.gz /opt
cd /opt
sudo tar zxvf jdk-7u3-linux-i586.tar.gz
Έχουμε πλέον έτοιμο το JDK και το JRE, αλλά
θα πρέπει να ενημερώσουμε το σύστημα για τη
θέση τους. Με τη βοήθεια ενός συντάκτη κειμέ-
νου (π.χ., gedit) προσθέτουμε τη διαδρομή των
εκτελέσιμων αρχείων στις γνωστές για το σύ-
στημά μας διαδρομές.
sudo gedit /etc/environment
Εκεί βάζουμε στην αρχή τη διαδρομή της μετα-
βλητής PATH τη διαδρομή /opt/jdk1.7.0_03/bin
ακολουθούμενη από άνω και κάτω τελεία (:) που
αποτελεί το διαχωριστικό διαδρομών της PATH.
PATH="/opt/jdk1.7.0_03/bin:/usr/local/s
bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/b
in:/usr/games"
Οι αλλαγές θα εφαρμοστούν έπειτα από επα-
νεκκίνηση του συστήματός μας. Ελέγχουμε την
εγκατάσταση δίνοντας:
java -version
Για συστήματα όπου το uptime είναι κρίσιμο,
μπορούμε εναλλακτικά να ενημερώσουμε τη με-
ταβλητή PATH στο αρχείο ρυθμίσεων του τρέχο-
ντος χρήστη...
sudo gedit .bashrc
...και για να εφαρμόσουμε τις αλλαγές χωρίς
επανεκκίνηση, δίνουμε:
. .bashrc
Μένει να ενημερώσουμε το φυλλομετρητή μας
(έστω τον Firefox) για την ύπαρξη του Java plug-
in [8]. Αν υποθέσουμε πως ο Firefox βρίσκεται
στο φάκελο /usr/lib/firefox-10.0.2. Τότε μεταβαί-
νουμε στον υποφάκελό του, plugins, και δημι-
ουργούμε έναν σύνδεσμο προς το εκτελέσιμο
του Java plug-in που εγκαταστάθηκε μαζί με το
JDK.
cd usr/lib/firefox-10.0.2/plugins
sudo ln -s
/opt/jdk1.7.0_03/jre/lib/i386/libnpjp2.so.
Ελέγχουμε την εγκατάσταση του plug-in πηγαί-
νοντας στην ιστοσελίδα
http://www.java.com/en/download/installed.jsp
και πατώντας το Verify Java version.
Εναλλακτική εγκατάσταση Java
Στο μοντέλο SWT ένας διαχειριστής
παραθύρων (display) χειρίζεται τόσο τα
γεγονότα των παραθύρων (shell) όσο και την
επικοινωνία τους με το γραφικό περιβάλλον
του λειτουργικού συστήματος