Προγραμματισμός

Το σχέδιο κειμένου είναι εύκολο με τρεις κατηγορίες Java

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

Μια κριτική

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

ο Γραφικά Το μάθημα παίζει δύο διαφορετικούς αλλά σχετικούς ρόλους μέσα στο αφηρημένο παράθυρο εργαλείων (AWT). Πρώτον, διατηρεί το περιβάλλον γραφικών, το οποίο αποτελείται από όλες τις πληροφορίες που θα επηρεάσουν το αποτέλεσμα μιας λειτουργίας γραφικών. Αυτό περιλαμβάνει το χρώμα σχεδίασης, τη γραμματοσειρά και τη θέση και τις διαστάσεις του ορθογωνίου αποκοπής (την περιοχή στην οποία μπορούν να σχεδιαστούν γραφικά). Το πιο σημαντικό, το περιβάλλον γραφικών καθορίζει τον προορισμό για τις λειτουργίες γραφικών που πρόκειται να συζητηθούν (οι προορισμοί περιλαμβάνουν στοιχεία και εικόνες).

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

Για να σχεδιάσετε, ένα πρόγραμμα απαιτεί ένα έγκυρο περιβάλλον γραφικών (που αντιπροσωπεύεται από μια παρουσία του Γραφικά τάξη). Επειδή η Γραφικά Η κλάση είναι μια αφηρημένη βασική τάξη, δεν μπορεί να δημιουργηθεί άμεσα. Ένα παράδειγμα δημιουργείται συνήθως από ένα στοιχείο και στη συνέχεια παραδίδεται στο πρόγραμμα ως επιχείρημα σε ένα στοιχείο εκσυγχρονίζω() και χρώμα() μεθόδους. Αυτές οι δύο μέθοδοι καλούνται ως μέρος του κανονικού κύκλου σχεδίασης που ξεκίνησε εντός του AWT.

ο Γραφικά τάξη λειτουργεί μαζί με το Γραμματοσειρά και Γραμματοσειρές τάξεις για την παροχή των απαραίτητων εργαλείων για τη σχεδίαση κειμένου σε μια εικόνα ή ένα στοιχείο. Ας ξεκινήσουμε εξετάζοντας το Γραφικά οι μέθοδοι της τάξης για τη σύνταξη κειμένου.

Κατηγορία γραφικών

ο Γραφικά Η κλάση παρέχει τρεις μεθόδους που αντλούν κείμενο σε ένα στοιχείο ή μια εικόνα.

void drawString (String str, int x, int y)

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

δημόσιο κενό χρώμα (Graphics g) {g.drawString ("abc", 25, 25); } 

Ο κωδικός στην παραπάνω λίστα δείχνει το drawString () μέθοδος που χρησιμοποιείται μέσα σε ένα στοιχείο χρώμα() μέθοδος. Ο κώδικας σε αυτό το παράδειγμα αντλεί τη λέξη "abc" στο στοιχείο που το περιέχει χρώμα() μέθοδος. ο Χ και γ οι συντεταγμένες καθορίζουν τη θέση του κάτω αριστερά γωνία του πλαισίου κειμένου που περικλείει. Το Σχήμα 1 δείχνει πώς θα ήταν το αποτέλεσμα εάν αυτός ο κώδικας ήταν μέρος κατάλληλου αντικειμένου AWT.

Σχήμα 1: Μια επίδειξη drawString ()

void drawChars (char [] δεδομένα, int offset, int μήκος, int x, int y)

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

δημόσιο κενό χρώμα (Γραφικά g) {char [] rgc = {'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', «j»};

g.drawChars (rgc, 0, 5, 25, 25); g.drawChars (rgc, 5, 5, 25, 50); }

Ο παραπάνω κώδικας δείχνει το drawChars () μέθοδος που χρησιμοποιείται μέσα σε ένα στοιχείο χρώμα() μέθοδος. Ο πίνακας χαρακτήρων σχεδιάζεται σε δύο μέρη. Στην πρώτη από τις δύο κλήσεις προς drawChars (), ο αντισταθμίζεται Η παράμετρος υποδεικνύει ότι το σχέδιο πρέπει να ξεκινήσει με τον πρώτο χαρακτήρα του πίνακα, και το μήκος Η παράμετρος δείχνει ότι συνολικά πέντε χαρακτήρες πρέπει να σχεδιαστούν στην πρώτη γραμμή. Η δεύτερη από τις δύο κλήσεις λειτουργεί με παρόμοιο τρόπο, αλλά αντλεί τους πέντε τελευταίους χαρακτήρες στη σειρά χαρακτήρων ξεκινώντας από μια θέση 25 pixel κάτω από την πρώτη. Το Σχήμα 2 δείχνει πώς θα ήταν το αποτέλεσμα εάν αυτός ο κωδικός ήταν μέρος ενός κατάλληλου αντικειμένου AWT.

Σχήμα 2: Μια επίδειξη drawChars ()

void drawBytes (byte [] δεδομένα, int offset, int μήκος, int x, int y)

Όπως φαίνεται παρακάτω, το drawBytes () Η μέθοδος λαμβάνει ως παραμέτρους έναν πίνακα byte που περιέχει το κείμενο που πρόκειται να σχεδιαστεί, μια ακέραια τιμή που δείχνει την μετατόπιση στη συστοιχία στην οποία θα ξεκινήσει, μια ακέραια τιμή που δείχνει τον αριθμό των bytes που θα σχεδιάσει και δύο ακέραιες τιμές που καθορίζουν τις συντεταγμένες όπου πρέπει αρχή.

δημόσιο κενό χρώμα (Γραφικά g) {byte [] rgb = {'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', «t»};

g.drawBytes (rgb, 0, 5, 25, 25); g.drawBytes (rgb, 5, 5, 25, 50); }

Ο παραπάνω κώδικας δείχνει το drawBytes () μέθοδος που χρησιμοποιείται μέσα σε ένα στοιχείο χρώμα() μέθοδος. Το Σχήμα 3 δείχνει πώς θα ήταν το αποτέλεσμα εάν αυτός ο κωδικός είναι μέρος ενός κατάλληλου αντικειμένου AWT.

Σχήμα 3: Μια επίδειξη drawBytes ()

Υποστήριξη Unicode

Ένα από τα πιο γνωστά χαρακτηριστικά της Java είναι η υποστήριξή του για διεθνή σενάρια μέσω του Unicode. Είναι ατυχές το γεγονός ότι η βιβλιοθήκη κλάσης Java που παρέχεται με την έκδοση 1.0 της γλώσσας προγραμματισμού Java δεν υποστήριξε πλήρως αυτήν την πτυχή της γλώσσας. Ωστόσο, φαίνεται ότι τα καλά νέα είναι πολύ κοντά. Το προκαταρκτικό API Διεθνοποίησης (βλ. Πόρους), διαθέσιμο από την SunSoft, έχει το εξής:

Το JDK 1.0 περιορίστηκε στην εμφάνιση μόνο των χαρακτήρων στο υποσύνολο Latin-1 του Unicode. Αυτός ο περιορισμός καταργείται στο JDK 1.1. Τα προγράμματα Java θα μπορούν πλέον να εμφανίζουν οποιονδήποτε χαρακτήρα Unicode που μπορεί να αποδοθεί με μια γραμματοσειρά κεντρικού υπολογιστή. Η Java παρέχει έναν μικρό αριθμό προκαθορισμένων "εικονικών" ονομάτων γραμματοσειρών και τα χαρτογραφεί σε πραγματικές γραμματοσειρές που είναι διαθέσιμες στον κεντρικό υπολογιστή. Στο JDK 1.0, κάθε όνομα γραμματοσειράς Java αντιστοιχίζεται σε ακριβώς μία γραμματοσειρά κεντρικού υπολογιστή. Στο JDK 1.1, ένα όνομα γραμματοσειράς Java μπορεί να αντιστοιχιστεί σε μια σειρά γραμματοσειρών κεντρικού υπολογιστή. Η σειρά των γραμματοσειρών κεντρικού υπολογιστή μπορεί να επιλεγεί για να καλύψει όσο το δυνατόν περισσότερα από το σύνολο χαρακτήρων Unicode.

Τοποθέτηση κειμένου

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

Το σχήμα 4 περιέχει μια γραμμή κειμένου που έχει επισημανθεί για να υποδείξει τα χαρακτηριστικά που πρόκειται να συζητήσουμε.

Σχήμα 4: Μια γραμμή κειμένου

ο γ Η παράμετρος συντεταγμένων στις μεθόδους στην προηγούμενη ενότητα καθορίζει τη θέση του βασική γραμμή μιας γραμμής κειμένου. ο βασική γραμμή είναι η γραμμή στην οποία οι περισσότεροι χαρακτήρες σε μια γραμμή κειμένου στηρίζονται (με εξαίρεση τους χαρακτήρες με απογόνους όπως "g" και "y"). Η βασική γραμμή δεν είναι πραγματικά χαρακτηριστικό μιας γραμματοσειράς, αλλά είναι το σημείο αναφοράς στο οποίο αναφέρονται όλα τα άλλα χαρακτηριστικά.

ο ανάβαση είναι η απόσταση από τη γραμμή βάσης έως την κορυφή των περισσότερων χαρακτήρων σε μια γραμματοσειρά. Αυτό συνήθως είναι το ύψος των κεφαλαίων γραμμάτων στη γραμματοσειρά και χαρακτήρων όπως "f" και "h". Ωστόσο, αυτός ο αριθμός είναι μόνο μια κατευθυντήρια γραμμή. Ορισμένοι χαρακτήρες στη γραμματοσειρά ενδέχεται να εκτείνονται πάνω από αυτήν την απόσταση.

ο κατάβαση είναι η απόσταση από τη γραμμή βάσης έως το κάτω μέρος των χαρακτήρων σε μια γραμματοσειρά που έχει απογόνους - χαρακτήρες όπως "p", "g" και "y". Όπως και με την ανάβαση, αυτός ο αριθμός είναι μόνο μια κατευθυντήρια γραμμή. Ορισμένοι χαρακτήρες στη γραμματοσειρά ενδέχεται να εκτείνονται κάτω από αυτήν την απόσταση.

ο κύριος (προφέρεται "ledding") είναι το διάστημα μεταξύ της κατάβασης μιας γραμμής κειμένου και της ανάβασης της γραμμής κάτω από αυτήν. Το ύψος μιας γραμμής κειμένου (η απόσταση από τη γραμμή βάσης μιας γραμμής κειμένου έως τη γραμμή βάσης μιας γραμμής κειμένου πάνω ή κάτω από αυτήν) περιλαμβάνει αυτόν τον επιπλέον χώρο.

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

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

Κατηγορία FontMetrics

ο Γραμματοσειρές Η τάξη παρέχει έναν απλό τρόπο για να δείτε τα χαρακτηριστικά που συζητήθηκαν παραπάνω. Εδώ είναι το getFontMetrics μέθοδος σε δράση:

δημόσιο άδειο χρώμα (Γραφικά g) {FontMetrics fm = g.getFontMetrics (); . . . } 

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

int getAscent ()

  • Επιστρέφει την ανάβαση της γραμματοσειράς.

int getDescent ()

  • Επιστρέφει την κατάβαση της γραμματοσειράς.

int getLeading ()

  • Επιστρέφει την αρχή της γραμματοσειράς.

int getHeight ()

  • Επιστρέφει το ύψος της γραμματοσειράς. Το ύψος είναι το άθροισμα της ανάβασης, της κατάβασης και της κορυφής της γραμματοσειράς.

int charWidth (int ch)

  • Επιστρέφει το πλάτος του καθορισμένου χαρακτήρα.

int charWidth (char ch)

  • Επιστρέφει το πλάτος του καθορισμένου χαρακτήρα.

int [] getWidths ()

  • Επιστρέφει έναν ακέραιο πίνακα που περιέχει τα πλάτη των πρώτων 256 χαρακτήρων της γραμματοσειράς.

Όπως αναφέρθηκε παραπάνω, οι χαρακτήρες που συνθέτουν μια γραμματοσειρά μπορεί μερικές φορές να εκτείνονται πέρα ​​από την ανάβαση, την κάθοδο και τα πλάτη που αναφέρονται από τις παραπάνω μεθόδους. Σε περιπτώσεις όπου απαιτούνται ακριβείς τιμές, παρέχονται οι ακόλουθες μέθοδοι.

int getMaxAscent ()

  • Επιστρέφει τη μέγιστη ανάβαση της γραμματοσειράς.

int getMaxDescent ()

  • Επιστρέφει τη μέγιστη κατάβαση της γραμματοσειράς.

int getMaxAdvance ()

  • Επιστρέφει το πλάτος του ευρύτερου χαρακτήρα στη γραμματοσειρά.

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

int stringWidth (String str)

  • Επιστρέφει το πλάτος της ακολουθίας χαρακτήρων.

int bytesWidth (byte [] rgb, int offset, int μήκος)

  • Επιστρέφει το πλάτος του μήκος μεγάλη ακολουθία byte που ξεκινά στις αντισταθμίζεται.

int charsWidth (char [] rgc, int offset, int μήκος)

  • Επιστρέφει το πλάτος του μήκος μεγάλη ακολουθία χαρακτήρων ξεκινώντας από αντισταθμίζεται.

Κατηγορία γραμματοσειράς

ο Γραμματοσειρά class ενσωματώνει πληροφορίες σχετικά με μια γραμματοσειρά. Δημιουργείται μια νέα γραμματοσειρά δημιουργώντας μια παρουσία του Γραμματοσειρά τάξη με όνομα, στυλ και μέγεθος σημείου.

Γραμματοσειρά f = new Font ("Dialog", Font.PLAIN, 12); 

Μόλις δημιουργηθεί, μια γραμματοσειρά μπορεί να αντιστοιχιστεί σε μια παρουσία του Γραφικά αντικείμενο.

g.setFont (στ); 

ο Γραφικά Στη συνέχεια, το αντικείμενο θα χρησιμοποιήσει τη γραμματοσειρά για όλες τις επόμενες λειτουργίες γραφικών που σχετίζονται με το κείμενο.

ο Γραμματοσειρά Το μάθημα παρέχει μεθόδους για τη λήψη πληροφοριών σχετικά με μια γραμματοσειρά μετά τη δημιουργία της.

Συμβολοσειρά getName ()

  • Επιστρέφει το όνομα της γραμματοσειράς.

String getFamily ()

  • Επιστρέφει το συγκεκριμένο όνομα της γραμματοσειράς για την πλατφόρμα.

int getSize ()

  • Επιστρέφει το μέγεθος σημείου της γραμματοσειράς.

int getStyle ()

  • Επιστρέφει το στυλ της γραμματοσειράς.

boolean isBold ()

  • Επιστρέφει αληθής αν η γραμματοσειρά είναι έντονη.

boolean isIalic ()

  • Επιστρέφει αληθής αν η γραμματοσειρά είναι πλάγια.

boolean isPlain ()

  • Επιστρέφει αληθής αν η γραμματοσειρά είναι απλή.

Συμβολοσειρά getName ()

  • Επιστρέφει το όνομα της γραμματοσειράς.

Μια επίδειξη

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

Χρειάζεστε ένα πρόγραμμα περιήγησης με δυνατότητα Java για να δείτε αυτό το applet.Εικόνα 5: Ένα διαδραστικό πρόγραμμα περιήγησης μετρικών γραμματοσειρών

Η μικροεφαρμογή χρησιμοποιεί το Γραφικά, Γραμματοσειρά, και Γραμματοσειρές μαθήματα εκτενώς. Η πηγή του είναι διαθέσιμη εδώ.

συμπέρασμα

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

Θα ήθελα να ευχαριστήσω όλους εσάς που αφιερώσατε χρόνο για να με γράψετε με τα σχόλια, τις ιδέες και τις προτάσεις σας. Συνέχισε την καλή δουλειά.

Ο Todd Sundsted γράφει προγράμματα από τότε που οι υπολογιστές έγιναν διαθέσιμοι σε μοντέλα επιτραπέζιων υπολογιστών. Αν και αρχικά ενδιαφερόταν να δημιουργήσει κατανεμημένες εφαρμογές αντικειμένων στο C ++, ο Todd μετακόμισε στη γλώσσα προγραμματισμού Java όταν η Java έγινε η προφανής επιλογή για κάτι τέτοιο. Ο Todd είναι συγγραφέας του Java Language API SuperBible, τώρα σε βιβλιοπωλεία παντού. Εκτός από τη γραφή, ο Todd παρέχει συμβουλευτικές υπηρεσίες Διαδικτύου και Ιστού σε εταιρείες στις νοτιοανατολικές Ηνωμένες Πολιτείες.

Μάθετε περισσότερα σχετικά με αυτό το θέμα

  • Η τάξη Γραφικά API:

    //www.javasoft.com/products/JDK/CurrentRelease/api/java.awt.Graphics.html

  • Η τάξη Γραμματοσειρά API:

    //www.javasoft.com/products/JDK/CurrentRelease/api/java.awt.Graphics.html

  • Η τάξη Γραμματοσειρές API:

    //www.javasoft.com/products/JDK/CurrentRelease/api/java.awt.Graphics.html

  • Χρησιμοποιώντας το Γραφικά τάξη:

    //www.javaworld.com/javaworld/jw-11-1996/jw-11-howto.html

  • Το API Διεθνοποίησης:

    //www.javasoft.com/products/JDK/1.1/docs/guide/intl/index.html

  • Το Java Tutorial των Mary Campione και Kathy Walrath:

    //www.javasoft.com/books/Series/Tutorial/index.html

Αυτή η ιστορία, "Το σχέδιο κειμένου είναι εύκολο με τρία μαθήματα Java" δημοσιεύθηκε αρχικά από την JavaWorld.