Programovanie

Zoznámenie sa s BoxLayout

Jedným zo štandardných manažérov rozloženia, ktorý je dodávaný s platformou Java, je BoxLayout. Takto môžete rozložiť jeden riadok alebo stĺpec komponentov v kontajneri. Môže to znieť ako nie príliš komplikovaný správca rozloženia, ale s pomocou Krabica a jeho lepidlo a vzpery, mysleli by ste si, že to bude stačiť, ale je toho ešte viac. Vertikálne a horizontálne vyrovnanie podkladových komponentov umožňuje ešte väčšiu kontrolu nad umiestnením komponentov v kontajneri. Tu sa pozrieme na všetky tieto aspekty.

Typické použitie

BoxLayout je na rozdiel od väčšiny manažérov rozloženia, ktoré iba vyžadujú vytvorenie správcu rozloženia a priradenie správcu rozloženia k Kontajner. Namiesto toho BoxLayout konštruktor vyžaduje, aby ste odovzdali Kontajner do konštruktora správcu rozloženia, čím má v každej z nich odkaz na druhú zložku. To môže byť niekedy nepríjemné a využijete to Krabica kontajner populárnejší, pretože stačí požiadať o vodorovné alebo zvislé rozloženie Krabica prostredníctvom jedného z jeho statický metódy:

 Kolónka zvislá = Box.createVerticalBox (); Kolónka vodorovne = Box.createHorizontalBox ();

Obaja používajú BoxLayout pod kryty, umiestnením pridaných komponentov na správny prístup, v závislosti od smeru. Vertikálne políčko umiestňuje všetko do jedného stĺpca, zatiaľ čo vodorovné pole umiestňuje všetko do riadku. Porovnávanie BoxLayout (a teda Krabica) až GridLayout vyžaduje rýchly komentár. Pri umiestňovaní zväzku komponentov do a GridLayout kontrolovaného kontajnera sa očakáva, že všetky komponenty budú mať rovnakú veľkosť. S BoxLayout, to tak nie je a maximálna preferovaná veľkosť komponentu je dodržaná.

Vzpery a lepidlo

Trieda Box ponúka vytvorenie dvoch podporných komponentov, jednej vzpery alebo oblasti výplne pevnej veľkosti, druhého lepidla pre roztiahnuteľnú oblasť. Ich použitie vám umožňuje umiestniť komponenty do kontajnera, a to buď v pevnej vzdialenosti od seba pomocou vzpery, alebo v rastúcej / zmenšujúcej sa oblasti na základe dostupného priestoru pomocou lepidla. Rovnakú úlohu je možné vykonať GridBagConstraints a GridBagLayout, aj keď nie tak ľahko.

Na demonštráciu tento prvý program vytvorí 25-pixlovú vzperu medzi dvoma hornými komponentmi a 10-pixelovú vzperu medzi dvoma spodnými.

import java.awt. *; importovať javax.swing. *; public class 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é tlačidlo ("hore")); box.add (Box.createVerticalStrut (25)); box.add (nové tlačidlo ("stredné")); box.add (Box.createVerticalStrut (10)); box.add (nové tlačidlo ("Spodné")); frame.add (box, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true); }}

Po jeho zostavení a spustení si všimnite, ako sa veľkosť komponentov mení, keď sa veľkosť okna zväčšuje alebo zmenšuje. Vzdialenosť medzi komponentmi zostáva nezmenená, aby zodpovedala vyhradenému priestoru vzpery. Tento príklad používa a Tlačidlo namiesto a JButton vyhnúť sa vysvetleniu zarovnania komponentov až o niečo neskôr.

Práca s vodorovnou škatuľou a lepidlom prináša podobné výsledky, aj keď tentokrát sa veľkosť lepidla zväčšuje, aby zaberala viac miesta, namiesto toho, aby zostala so stálou veľkosťou.

import java.awt. *; importovať 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 (nové JButton ("vľavo")); box.add (nové JButton ("pravé")); frame.add (box, BorderLayout.NORTH); box = Box.createHorizontalBox (); box.add (nové JButton ("vľavo")); box.add (Box.createHorizontalGlue ()); box.add (nové JButton ("pravé")); frame.add (box, BorderLayout.CENTER); box = Box.createHorizontalBox (); box.add (nové JButton ("vľavo")); box.add (nové JButton ("pravé")); box.add (Box.createHorizontalGlue ()); frame.add (box, BorderLayout.SOUTH); frame.setSize (300, 200); frame.setVisible (true); }}

Snažíme sa vás príliš nemýliť, ale príklad je späť v používaní JButton komponenty.

Zarovnanie

Život je zaujímavý Box / BoxLayout keď súčasti vnútri kontajnera majú inú veľkosť alebo je výška / šírka kontajnera širšia, ako je potrebné pre vertikálnu škatuľu, alebo vyššia, ako je potrebné pri horizontálnej krabici. Inými slovami, ak máte vysoký stĺp, kde končia komponenty inej šírky? A ak máte široký rad s komponentmi inej výšky, čo tak s nimi?

To je miesto, kde prichádzajú do úvahy rôzne vyrovnania komponentov. Každý komponent Swing má X-zarovnanie nastavenie a a Y-zarovnanie nastavenie vďaka jeho get / setAlignmentX () a get / setAlignmentY () metódy. Rozsah každého nastavenia je od 0 do 1.0, vrátane, kde 0 predstavuje zarovnanie doľava alebo zhora a 1 predstavuje zarovnanie vpravo alebo dole, v závislosti od smeru BoxLayout. V súbore sú k dispozícii konštanty Komponent triedy, takže vlastne nemusíte vedieť, aké sú hodnoty pre zarovnanie vpravo a vľavo. Pomáha však vedieť, či by ste chceli niečo medzi tým.

Na demonštráciu pravého, ľavého a stredového tvaru tlačidiel s rôznymi veľkosťami vo zvislom poli vytvorí nasledujúci program tri políčka, z ktorých každé je vyplnené ľavým, stredným a pravým tlačidlom.

import java.awt. *; importovať 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); Tlačidlo JButton = nové JButton (štítok); button.setAlignmentX (zarovnanie); box.add (tlačidlo); } návratové pole; } private static String makeLabel (String s, int length) {StringBuffer buff = new StringBuffer (length); pre (int i = 0; i

Poďme si to trochu pomiešať a mať jedno zvislé políčko s tromi tlačidlami, jedno pre každé zarovnanie. Šírka obrazovky bude široká, aby sa zabezpečilo, že je k dispozícii viac miesta. Z koncepčného hľadiska by sa dalo očakávať, že komponent s ľavým zarovnaním bude zarovnaný k ľavej časti kontajnera a ten s pravým zarovnaním bude zarovnaný k pravej strane kontajnera. To by však nebolo správne. Ak existujú rôzne zarovnania komponentov, sú zarovnané do stredu nádoby. Pre zarovnanie doľava bude mať teda tento komponent ľavý okraj na neviditeľnej stredovej čiare kontajnera. Pre správne zarovnanie je to pravý okraj.

Tu je program na demonštráciu:

import java.awt. *; importovať 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 (); Tlačidlo JButton = nové JButton ("LL"); button.setAlignmentX (Component.LEFT_ALIGNMENT); box.add (tlačidlo); button = new JButton ("CC"); button.setAlignmentX (Component.CENTER_ALIGNMENT); box.add (tlačidlo); button = new JButton ("RR"); button.setAlignmentX (Component.RIGHT_ALIGNMENT); box.add (tlačidlo); frame.add (box, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true);}} 

A potvrdzujúca obrazovka:

Práca v opačnom smere má horné zarovnanie, ktoré zarovná hornú časť súčasti k imaginárnej stredovej čiare, alebo inými slovami pod stred.

Zmiešanie zarovnania týmto spôsobom funguje dobre, ale stačí si trochu zvyknúť, pretože zarovnanie nemusí byť nevyhnutne tam, kde by ste to čakali, pokiaľ nie sú všetky zarovnania rovnaké a potom sa zarovná k hranici kontajnera, na rozdiel od stredovej čiary kontajnera.

Ak stále máte zmätok, pokojne upravte predchádzajúce programy a vyskúšajte ešte viac kombinácií X a r vyrovnanie. Samozrejme, ak vás toto všetko mätie, vždy existuje GridBagLayout.

******

Chat SDN: Zoznámte sa so autormi stránky java.sun.com

Pripojte sa k nám vo štvrtok na vývojárskom ihrisku spoločnosti Sun v Second Life, 14. februára o 10:00 PST stretnúť so spisovateľmi stránky java.sun.com. Ed Ort, Dana Nourie, Janice Heiss a Laureen Hudson budú vo svete, kde budú písomne ​​diskutovať o svojich dobrodružstvách pre jeden z najpopulárnejších webov v priemysle a zdieľať technológie a trendy, na ktoré budú v roku 2008 dohliadať. A pre prvýkrát spoločnosť SMI Press s potešením ponúka účastníkom jednu z troch nových kníh SMI Press zadarmo!

Tento príbeh, „Zoznámenie sa s BoxLayout“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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