Programiranje

Spoznavanje BoxLayout

Eden od standardnih upraviteljev postavitve, ki prihaja s platformo Java, je BoxLayout. To vam omogoča postavitev ene vrstice ali stolpca komponent v vsebnik. To se morda sliši kot ne tako zapleten upravitelj postavitve, vendar s pomočjo Škatla in njegovo lepilo in opore, bi mislili, da bi bilo to dovolj, a obstaja še več. Navpična in vodoravna poravnava osnovnih komponent omogoča še večji nadzor nad pozicioniranjem komponent v posodi. Tukaj bomo preučili vse te vidike.

Tipična uporaba

BoxLayout je drugačen od večine upraviteljev postavitve, ki samo zahtevajo, da ustvarite upravitelja postavitve in upravitelja postavitve povežete z Zabojnik. Namesto tega BoxLayout konstruktor zahteva, da prenesete Zabojnik v konstruktor upravitelja postavitve, s čimer se sklicuje na drugo komponento v vsaki od njih. To je včasih lahko neprijetno in uporablja Škatla posoda bolj priljubljena, saj morate le zahtevati vodoravno ali navpično postavljeno posodo Škatla skozi enega od svojih statično metode:

 Navpično polje = Box.createVerticalBox (); Vodoravno polje = Box.createHorizontalBox ();

Oba uporabljata BoxLayout pod pokrovi, tako da dodate komponente na ustrezen dostop, odvisno od smeri. Navpično polje postavi vse v en stolpec, medtem ko vodoravno polje postavi vse v vrsto. Primerjava BoxLayout (in s tem Škatla) do GridLayout zahteva hiter komentar. Ko postavite kup komponent v a GridLayout nadzorovane posode naj bi bile vse komponente enake velikosti. S BoxLayout, temu ni tako in upošteva se največja želena velikost komponente.

Oporniki in lepilo

Razred Box ponuja izdelavo dveh nosilnih komponent, enega opornika ali polnila določene velikosti, drugega lepila za razširljivo površino. Uporaba le-teh vam omogoča, da z lepilom namestite sestavne dele znotraj posode, bodisi na razdalji z opornikom bodisi na območje rasti / krčenja, ki temelji na razpoložljivem prostoru. Isto nalogo je mogoče storiti z GridBagConstraints in GridBagLayout, čeprav ne tako enostavno.

Za ponazoritev ta prvi program ustvari opornik s 25 slikovnimi pikami med zgornjima komponentama in opornik z 10 slikovnimi pikami med spodnjima dvema.

uvoz java.awt. *; uvoz javax.swing. *; javni razred 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 (nov gumb ("Na vrh")); box.add (Box.createVerticalStrut (25)); box.add (nov gumb ("Srednji")); box.add (Box.createVerticalStrut (10)); box.add (nov gumb ("Spodaj")); frame.add (polje, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true); }}

Ko ga sestavite in zaženete, opazite, kako se velikosti komponent spreminjajo, ko se velikost okna poveča ali zmanjša. Razdalja med komponentami ostane nespremenjena, da se ujema z rezerviranim prostorom. Ta primer uporablja Gumb namesto a JButton da se izognemo razlagi poravnave komponent šele malo kasneje.

Delo z vodoravno škatlo in lepilom daje podobne rezultate, čeprav tokrat lepilo naraste in zavzame dodaten prostor, namesto da bi ostalo s fiksno velikostjo.

uvoz java.awt. *; uvoz javax.swing. *; javni razred 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 (nov JButton ("Levo")); box.add (nov JButton ("Desno")); frame.add (polje, BorderLayout.NORTH); box = Box.createHorizontalBox (); box.add (nov JButton ("Levo")); box.add (Box.createHorizontalGlue ()); box.add (nov JButton ("Desno")); frame.add (polje, BorderLayout.CENTER); box = Box.createHorizontalBox (); box.add (nov JButton ("Levo")); box.add (nov JButton ("Desno")); box.add (Box.createHorizontalGlue ()); frame.add (polje, BorderLayout.SOUTH); frame.setSize (300, 200); frame.setVisible (true); }}

Trudim se, da vas ne bi preveč zmedli, vendar je primer spet uporaben JButton sestavnih delov.

Poravnava

Življenje postane zanimivo z Box / BoxLayout kadar so sestavni deli v posodi drugačne velikosti ali če je višina / širina posode širša, kot je potrebno za navpično omarico, ali višja, kot je potrebno, pri vodoravni. Z drugimi besedami, če imate visok stolpec, kje se znajdejo komponente z različno širino? In če imate široko vrsto s sestavnimi deli drugačne višine, kako je z njimi?

Tu pridejo v poštev različne poravnave komponente. Vsaka komponenta Swing ima X-poravnava nastavitev in a Y-poravnava nastavitev zahvaljujoč get / setAlignmentX () in get / setAlignmentY () metode. Območje posamezne nastavitve je od 0 do 1.0, vključno, kjer 0 predstavlja levo ali zgornjo poravnavo in 1 predstavlja desno ali spodnjo poravnavo, odvisno od smeri BoxLayout. V. So na voljo konstante Komponenta razreda, tako da vam v resnici ni treba vedeti, kakšne so vrednosti za desno in levo poravnavo. Vendar pa pomaga vedeti, ali si morda želite kaj vmes.

Za prikaz desne, leve, sredinske narave različnih velikosti gumbov v navpičnem polju naslednji program ustvari tri polja, po eno napolnjeno z levim, sredinskim in desnim poravnanim gumbom.

uvoz java.awt. *; uvoz javax.swing. *; javni razred AlignX {zasebni statični vsebnik makeIt (String labelChar, poravnava s plovcem) {Box box = Box.createVerticalBox (); for (int i = 1; i <6; i ++) {Oznaka niza = makeLabel (labelChar, i * 2); Gumb JButton = nov JButton (nalepka); button.setAlignmentX (poravnava); box.add (gumb); } povratno okence; } zasebni statični niz makeLabel (niz s, dolžina int) {StringBuffer buff = nov StringBuffer (dolžina); za (int i = 0; i

Zdaj pa malo zmešajte stvari in imejte eno navpično polje s tremi gumbi, po enega za vsako poravnavo. Širina zaslona bo široka, da bo na voljo dodaten prostor. Konceptualno bi lahko pričakovali, da je komponenta z levo poravnavo poravnana levo od vsebnika, tista z desno poravnavo pa desno od vsebnika. To pa bi bilo narobe. Če obstajajo različne poravnave komponent, so poravnane na sredino vsebnika. Torej, za levo poravnavo bo imela ta komponenta levi rob na nevidni sredinski črti vsebnika. Za desno poravnavo je to desni rob.

Tukaj je program za predstavitev:

uvoz java.awt. *; uvoz javax.swing. *; javni razred AlignX2 {public static void main (String args []) {JFrame frame = new JFrame ("X Alignment"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Box box = Box.createVerticalBox (); Gumb JButton = nov JButton ("LL"); button.setAlignmentX (Component.LEFT_ALIGNMENT); box.add (gumb); button = nov JButton ("CC"); button.setAlignmentX (Component.CENTER_ALIGNMENT); box.add (gumb); button = nov JButton ("RR"); button.setAlignmentX (Component.RIGHT_ALIGNMENT); box.add (gumb); frame.add (polje, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true);}} 

In potrditveni zaslon:

Delo v drugo smer ima zgornjo poravnavo, tako da vrh komponente poravna namišljeno sredinsko črto ali z drugimi besedami pod sredino.

Mešanje poravnav na ta način deluje v redu, vendar se je treba le malo navaditi, saj poravnava ni nujno tam, kjer bi pričakovali, razen če so vse poravnave enake, nato pa se poravna na rob posode za razliko od sredinske črte posode.

Če ste še vedno zmedeni, lahko spremenite prejšnje programe in preizkusite še več kombinacij x in y poravnava. Seveda, če vas vse to moti, vedno obstaja GridBagLayout.

******

SDN Klepet: Spoznajte pisce java.sun.com

Prosimo, pridružite se nam v četrtek na Sun's Developer Playground v Second Life, 14. februarja ob 10.00 PST za srečanje s pisci java.sun.com. Ed Ort, Dana Nourie, Janice Heiss in Laureen Hudson se bodo preselili v svet, da bodo o svojih dogodivščinah pisno razpravljali o enem izmed najbolj priljubljenih spletnih mest v industriji in delili tehnologije in trende, na katere bodo pozorni v letu 2008. In prvič SMI Press z veseljem udeležencem ponudi eno od treh novih knjig SMI Press brezplačno!

To zgodbo "Spoznavanje BoxLayout" je prvotno objavil JavaWorld.

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