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

Γνωριμία με το BoxLayout

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

Τυπική χρήση

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

 Box κάθετο = Box.createVerticalBox (); Πλαίσιο οριζόντιο = Box.createHorizontalBox ();

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

Γόνατα και κόλλα

Η κατηγορία Box προσφέρει τη δημιουργία δύο υποστηρικτικών εξαρτημάτων, το ένα γόνατο ή την περιοχή πλήρωσης σταθερού μεγέθους, το άλλο κόλλα για μια επεκτάσιμη περιοχή. Η χρήση αυτών σας επιτρέπει να τοποθετήσετε εξαρτήματα μέσα σε ένα δοχείο, είτε σε σταθερή απόσταση εκτός από ένα γόνατο, είτε σε μια περιοχή ανάπτυξης / συρρίκνωσης με βάση τον διαθέσιμο χώρο, με κόλλα. Η ίδια εργασία μπορεί να γίνει με GridBagConstraints και GridBagLayout, αν και όχι τόσο εύκολα.

Για να το δείξουμε, αυτό το πρώτο πρόγραμμα δημιουργεί ένα στήριγμα 25 pixel μεταξύ των δύο κορυφαίων στοιχείων και ένα στήριγμα 10 pixel μεταξύ των δύο κάτω.

εισαγωγή java.awt. *; εισαγωγή javax.swing. *; δημόσια τάξη VerticalBoxTest {public static void main (String args []) {JFrame frame = new JFrame ("Vertical Box"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Box box = Box.createVerticalBox (); box.add (νέο κουμπί ("Κορυφή")); box.add (Box.createVerticalStrut (25)); box.add (νέο κουμπί ("Μέση")); box.add (Box.createVerticalStrut (10)); box.add (νέο κουμπί ("Κάτω")); frame.add (πλαίσιο, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true); }}

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

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

εισαγωγή java.awt. *; εισαγωγή javax.swing. *; δημόσια τάξη HorizontalBoxTest {public static void main (String args []) {JFrame frame = new JFrame ("Horizontal Box"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Πλαίσιο κουτιού = Box.createHorizontalBox (); box.add (Box.createHorizontalGlue ()); box.add (νέο JButton ("Left")); box.add (νέο JButton ("Right")); frame.add (πλαίσιο, BorderLayout.NORTH); box = Box.createHorizontalBox (); box.add (νέο JButton ("Left")); box.add (Box.createHorizontalGlue ()); box.add (νέο JButton ("Right")); frame.add (πλαίσιο, BorderLayout.CENTER); box = Box.createHorizontalBox (); box.add (νέο JButton ("Left")); box.add (νέο JButton ("Right")); box.add (Box.createHorizontalGlue ()); frame.add (πλαίσιο, BorderLayout.SOUTH); frame.setSize (300, 200); frame.setVisible (true); }}

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

Ευθυγραμμία

Η ζωή γίνεται ενδιαφέρουσα με Box / BoxLayout όταν τα συστατικά μέσα στο δοχείο έχουν διαφορετικό μέγεθος ή το ύψος / πλάτος του δοχείου είναι μεγαλύτερο από το απαραίτητο για κάθετο κουτί ή ψηλότερο από το απαραίτητο με ένα οριζόντιο. Με άλλα λόγια, εάν έχετε ψηλή στήλη, πού καταλήγουν στοιχεία διαφορετικού πλάτους; Και, αν έχετε μια ευρεία σειρά με στοιχεία διαφορετικού ύψους, τι γίνεται με αυτά;

Εδώ παίζουν οι διαφορετικές ευθυγραμμίσεις ενός στοιχείου. Κάθε στοιχείο Swing έχει ένα X-ευθυγράμμιση ρύθμιση και α Υ-ευθυγράμμιση ρύθμιση χάρη σε αυτό λήψη / setAlignmentX () και λήψη / setAlignmentY () μεθόδους. Το εύρος κάθε ρύθμισης είναι από 0 προς την 1.0, χωρίς αποκλεισμούς, όπου 0 αντιπροσωπεύει αριστερή ή επάνω ευθυγράμμιση και 1 αντιπροσωπεύει δεξιά ή κάτω ευθυγράμμιση, ανάλογα με την κατεύθυνση του BoxLayout. Υπάρχουν σταθερές διαθέσιμες στο Συστατικό τάξη, ώστε να μην χρειάζεται να γνωρίζετε ποιες είναι οι τιμές για τη δεξιά και αριστερή στοίχιση. Ωστόσο, βοηθά να μάθουμε αν μπορεί να θέλετε κάτι στο μεταξύ.

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

εισαγωγή java.awt. *; εισαγωγή javax.swing. *; δημόσια τάξη AlignX {private static Container makeIt (String labelChar, float alignment) {Box box = Box.createVerticalBox (); για (int i = 1; i <6; i ++) {String label = makeLabel (labelChar, i * 2); Κουμπί JButton = νέο JButton (ετικέτα); button.setAlignmentX (ευθυγράμμιση); box.add (κουμπί); } κουτί επιστροφής; } ιδιωτικό στατικό String makeLabel (String s, int length) {StringBuffer buff = new StringBuffer (μήκος); για (int i = 0; i

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

Εδώ είναι το πρόγραμμα για να δείξετε:

εισαγωγή java.awt. *; εισαγωγή javax.swing. *; δημόσια τάξη AlignX2 {public static void main (String args []) {JFrame frame = new JFrame ("X Alignment"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Box box = Box.createVerticalBox (); Κουμπί JButton = νέο JButton ("LL"); button.setAlignmentX (Component.LEFT_ALIGNMENT); box.add (κουμπί); κουμπί = νέο JButton ("CC"); button.setAlignmentX (Component.CENTER_ALIGNMENT); box.add (κουμπί); κουμπί = νέο JButton ("RR"); button.setAlignmentX (Component.RIGHT_ALIGNMENT); box.add (κουμπί); frame.add (πλαίσιο, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true);}} 

Και, η επιβεβαιωτική οθόνη:

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

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

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

******

Συνομιλία SDN: Γνωρίστε τους συγγραφείς του java.sun.com

Ελάτε μαζί μας στο Sun's Developer Playground στο Second Life την Πέμπτη, 14 Φεβρουαρίου στις 10 π.μ. PST για να γνωρίσετε τους συγγραφείς του java.sun.com. Οι Ed Ort, Dana Nourie, Janice Heiss και Laureen Hudson θα βρίσκονται στον κόσμο για να συζητήσουν τις περιπέτειες τους γραπτώς για έναν από τους πιο δημοφιλείς ιστότοπους της βιομηχανίας και να μοιραστούν τις τεχνολογίες και τις τάσεις που θα κρατήσουν τα μάτια τους το 2008. Και, για για πρώτη φορά, η SMI Press είναι στην ευχάριστη θέση να προσφέρει στους συμμετέχοντες ένα από τα τρία νέα βιβλία SMI Press δωρεάν!

Αυτή η ιστορία, "Γνωριμία με το BoxLayout" δημοσιεύθηκε αρχικά από την JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found