Programmering

Bli kjent med BoxLayout

En av standardlayoutledere som følger med Java-plattformen er BoxLayout. Dette lar deg legge opp en enkelt rad eller kolonne med komponenter i en container. Dette kan høres ut som en ikke så komplisert layout manager, men med hjelp av Eske og dens lim og stag, du tror det ville være nok, men det er enda mer. Den vertikale og horisontale innrettingen av de underliggende komponentene tillater enda mer kontroll over plasseringen av komponenter i containeren. Her vil vi se på alle disse aspektene.

Typisk bruk

BoxLayout er i motsetning til de fleste layoutadministratorer som bare krever at du oppretter layout manager, og knytter layout manager til Container. I stedet for BoxLayout konstruktør krever at du passerer Container inn i konstruktøren til layoutlederen, og dermed ha en referanse til den andre komponenten i hver av dem. Dette kan være vanskelig noen ganger, og gjør bruk av Eske beholder mer populær, siden alt du trenger å gjøre er å be om en horisontal eller vertikal planlagt Eske gjennom en av dens statisk metoder:

 Box vertical = Box.createVerticalBox (); Boks vannrett = Box.createHorizontalBox ();

Begge bruker BoxLayout under dekslene, og plasser ekstra komponenter på riktig tilgang, avhengig av retning. En vertikal boks plasserer alt i en enkelt kolonne, mens en vannrett boks plasserer alt på rad. Sammenligning BoxLayout (og dermed Eske) til GridLayout krever en rask kommentar. Når du plasserer en haug med komponenter i en GridLayout kontrollert container, forventes alle komponentene å ha samme størrelse. Med BoxLayout, det er ikke tilfelle, og den maksimale foretrukne størrelsen på komponenten blir respektert.

Stivere og lim

Box-klassen tilbyr opprettelse av to støttekomponenter, den ene en stiver eller påfyllingsområdet i fast størrelse, den andre limet for et utvidbart område. Bruken av disse lar deg plassere komponenter i en container, enten en fast avstand fra hverandre med en stag, eller et voksende / krympende område basert på tilgjengelig plass, med lim. Den samme oppgaven kan gjøres med GridBagConstraints og GridBagLayout, men ikke så lett.

For å demonstrere skaper dette første programmet en 25 piksler stiv mellom de to øverste komponentene og en 10 piksler stiv mellom de to nederste.

importer java.awt. *; import javax.swing. *; offentlig klasse 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 (ny knapp ("Topp")); box.add (Box.createVerticalStrut (25)); box.add (ny knapp ("Middle")); box.add (Box.createVerticalStrut (10)); box.add (ny knapp ("Nederst")); frame.add (boks, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true); }}

Når du har samlet og kjørt den, legg merke til hvordan komponentene endres i størrelse når vindusstørrelsen økte eller reduserte. Avstanden mellom komponentene forblir uendret, for å matche det reserverte spenningsområdet. Dette eksemplet bruker en Knapp i stedet for en JButton for å unngå en forklaring på komponentjustering til litt senere.

Å jobbe med en horisontal boks og lim gir lignende resultater, men denne gangen vokser limet i størrelse for å ta ekstra plass, i stedet for å holde seg i en fast størrelse, med staget.

importer java.awt. *; import javax.swing. *; public class HorizontalBoxTest {public static void main (String args []) {JFrame frame = new JFrame ("Horizontal Box"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Box box = Box.createHorizontalBox (); box.add (Box.createHorizontalGlue ()); box.add (ny JButton ("Venstre")); box.add (ny JButton ("Høyre")); frame.add (boks, BorderLayout.NORTH); boks = Box.createHorizontalBox (); box.add (ny JButton ("Venstre")); box.add (Box.createHorizontalGlue ()); box.add (ny JButton ("Høyre")); frame.add (boks, BorderLayout.CENTER); boks = Box.createHorizontalBox (); box.add (ny JButton ("Venstre")); box.add (ny JButton ("Høyre")); box.add (Box.createHorizontalGlue ()); frame.add (boks, BorderLayout.SOUTH); frame.setSize (300, 200); frame.setVisible (true); }}

Prøver å ikke forvirre deg for mye, men eksemplet er tilbake til bruk JButton komponenter.

Justering

Livet blir interessant med Box / BoxLayout når komponentene i beholderen har en annen størrelse eller beholderens høyde / bredde er bredere enn nødvendig for en vertikal kasse eller høyere enn nødvendig med en horisontal. Med andre ord, hvis du har en høy kolonne, hvor havner komponenter med en annen bredde? Og hvis du har en bred rad med komponenter i en annen høyde, hva med dem?

Det er her de forskjellige justeringene til en komponent spiller inn. Hver Swing-komponent har en X-justering innstilling og en Y-justering innstilling takket være sin get / setAlignmentX () og get / setAlignmentY () metoder. Rekkevidden for hver innstilling er fra 0 til 1.0, inkludert, hvor 0 representerer venstre- eller toppjustering og 1 representerer justering av høyre eller bunn, avhengig av retning BoxLayout. Det er konstanter tilgjengelig i Komponent klasse slik at du ikke egentlig trenger å vite hva verdiene er for høyre og venstre justering. Det hjelper imidlertid å vite om du kanskje vil ha noe i mellom.

For å demonstrere høyre, venstre, sentrale natur for forskjellige størrelsesknapper i en vertikal rute, oppretter følgende program tre ruter, en hver fylt med venstre, senter og høyre justerte knapper.

importer java.awt. *; import javax.swing. *; public class AlignX {private static Container makeIt (String labelChar, float alignment) {Box box = Box.createVerticalBox (); for (int i = 1; i <6; i ++) {String label = makeLabel (labelChar, i * 2); JButton-knapp = ny JButton (etikett); button.setAlignmentX (justering); box.add (knapp); } returboks; } privat statisk streng makeLabel (streng s, int lengde) {StringBuffer buff = ny StringBuffer (lengde); for (int i = 0; i

La oss nå blande ting litt sammen og ha en vertikal rute med tre knapper, en for hver justering. Skjermbredden vil være bred for å sikre at det er ekstra plass tilgjengelig. Konseptuelt tenkende, man forventer at komponenten med venstre innretting skal innrettes til venstre for beholderen og den med høyre innretting skal innrettes mot høyre for beholderen. Det ville være galt skjønt. Når det er forskjellige komponentjusteringer, blir de justert til midten av beholderen. Så for venstrejustering vil den komponenten ha sin venstre kant på den usynlige midtlinjen til beholderen. For riktig justering er det høyre kant.

Her er programmet for å demonstrere:

importer java.awt. *; import javax.swing. *; public class AlignX2 {public static void main (String args []) {JFrame frame = new JFrame ("X Alignment"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Box box = Box.createVerticalBox (); JButton-knapp = ny JButton ("LL"); button.setAlignmentX (Component.LEFT_ALIGNMENT); box.add (knapp); knapp = ny JButton ("CC"); button.setAlignmentX (Component.CENTER_ALIGNMENT); box.add (knapp); knapp = ny JButton ("RR"); button.setAlignmentX (komponent.RIGHT_ALIGNMENT); box.add (knapp); frame.add (boks, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true);}} 

Og den bekreftende skjermen:

Å jobbe i den andre retningen har toppjustering som justerer toppen av komponenten til den imaginære midtlinjen, eller med andre ord under midten.

Å blande justeringer på denne måten fungerer bra, men det tar bare litt å bli vant til, da justeringen ikke nødvendigvis er der du forventer at den skal være, med mindre alle justeringene er de samme, og deretter justerer den seg til containergrensen, i motsetning til containersenterlinjen.

Hvis du fremdeles er forvirret, kan du endre de tidligere programmene og prøve enda flere kombinasjoner av x og y Justering. Selvfølgelig, hvis alt dette forvirrer deg, er det alltid GridBagLayout.

******

SDN Chat: Møt forfatterne av java.sun.com

Bli med oss ​​på Suns Developer Playground in Second Life på torsdag, 14. februar klokka 10 PST for å møte forfatterne av java.sun.com. Ed Ort, Dana Nourie, Janice Heiss og Laureen Hudson vil være i verden for å diskutere eventyrene sine skriftlig for et av bransjens mest populære nettsteder og for å dele teknologiene og trendene de vil holde øye med i 2008. Og for første gang, SMI Press er glade for å tilby deltakerne en av tre nye SMI Press-bøker gratis!

Denne historien, "Bli kjent med BoxLayout", ble opprinnelig utgitt av JavaWorld.

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