Programování

Seznámení s BoxLayout

Jedním ze standardních správců rozložení, které přicházejí s platformou Java, je BoxLayout. To vám umožní rozložit jeden řádek nebo sloupec komponent v kontejneru. Může to znít jako ne tak komplikovaný správce rozvržení, ale s pomocí Krabice a jeho lepidlo a vzpěry, myslíte si, že by to stačilo, ale je toho ještě víc. Vertikální a horizontální zarovnání podkladových komponent umožňuje ještě větší kontrolu nad umístěním komponent v kontejneru. Zde se podíváme na všechny tyto aspekty.

Typické použití

BoxLayout je na rozdíl od většiny správců rozložení, které vyžadují pouze vytvoření správce rozložení a přidružení správce rozložení k Kontejner. Místo toho BoxLayout konstruktor vyžaduje, abyste předali Kontejner do konstruktoru správce rozvržení, což má v každé z nich odkaz na další komponentu. To může být někdy nepříjemné a je možné použít Krabice kontejner populárnější, protože vše, co musíte udělat, je požádat o vodorovné nebo svislé vyložení Krabice prostřednictvím jednoho z jeho statický metody:

 Box vertical = Box.createVerticalBox (); Box vodorovně = Box.createHorizontalBox ();

Oba používají BoxLayout pod kryty, umístění přidaných komponent na správný přístup, v závislosti na směru. Vertikální rámeček umístí vše do jednoho sloupce, zatímco vodorovný rámeček umístí vše do řádku. Porovnávání BoxLayout (a tudíž Krabice) až Rozvržení mřížky vyžaduje rychlý komentář. Při umisťování řady komponent do a Rozvržení mřížky u kontrolovaného kontejneru se očekává, že všechny součásti budou mít stejnou velikost. S BoxLayout, to tak není a je dodržena maximální preferovaná velikost komponenty.

Vzpěry a lepidlo

Třída Box nabízí vytvoření dvou podpůrných komponent, jedné vzpěry nebo oblasti výplně pevné velikosti, druhé lepidla pro roztažitelnou oblast. Jejich použití vám umožňuje umístit komponenty do kontejneru, buď s pevnou vzdáleností od sebe pomocí vzpěry, nebo rostoucí / zmenšující se oblast na základě dostupného prostoru, pomocí lepidla. Stejný úkol lze provést s GridBagConstraints a GridBagLayout, i když ne tak snadno.

Abychom demonstrovali, tento první program vytvoří vzpěru 25 pixelů mezi dvěma horními komponentami a vzpěru 10 pixelů mezi dvěma spodními.

importovat java.awt. *; importovat javax.swing. *; veřejná třída 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čítko ("Nahoře")); box.add (Box.createVerticalStrut (25)); box.add (nové tlačítko ("Střední")); box.add (Box.createVerticalStrut (10)); box.add (nové tlačítko ("dole")); frame.add (box, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true); }}

Jakmile jej zkompilujete a spustíte, všimněte si, jak se komponenty mění ve velikosti, když se zvětšuje nebo zmenšuje velikost okna. Vzdálenost mezi komponentami zůstává nezměněna, aby odpovídala vyhrazenému prostoru vzpěry. Tento příklad používá a Knoflík místo a JButton vyhnout se vysvětlení zarovnání komponent až o něco později.

Práce s vodorovnou krabicí a lepidlem přináší podobné výsledky, i když tentokrát se lepidlo zvětšuje, aby zabíralo přidané místo, místo aby zůstalo pevné velikosti se vzpěrou.

importovat java.awt. *; importovat javax.swing. *; veřejná třída 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 ("vlevo")); box.add (nové JButton ("pravé")); frame.add (box, BorderLayout.NORTH); box = Box.createHorizontalBox (); box.add (nové JButton ("vlevo")); box.add (Box.createHorizontalGlue ()); box.add (nové JButton ("pravé")); frame.add (box, BorderLayout.CENTER); box = Box.createHorizontalBox (); box.add (nové JButton ("vlevo")); box.add (nové JButton ("pravé")); box.add (Box.createHorizontalGlue ()); frame.add (box, BorderLayout.SOUTH); frame.setSize (300, 200); frame.setVisible (true); }}

Snažím se vás příliš zmást, ale příklad je zpět k použití JButton komponenty.

Zarovnání

Život začíná být zajímavý Box / BoxLayout pokud jsou součásti v kontejneru jiné velikosti nebo je výška / šířka kontejneru širší, než je nutné u svislé krabice, nebo vyšší, než je nutné u vodorovné. Jinými slovy, pokud máte vysoký sloup, kde končí komponenty jiné šířky? A pokud máte širokou řadu s komponenty jiné výšky, co takhle?

Zde vstupují do hry různá zarovnání komponenty. Každá součást Swing má X-zarovnání nastavení a Y-zarovnání nastavení díky jeho get / setAlignmentX () a get / setAlignmentY () metody. Rozsah každého nastavení je od 0 na 1.0, včetně, kde 0 představuje zarovnání vlevo nebo nahoře a 1 představuje zarovnání vpravo nebo dole, v závislosti na směru BoxLayout. V souboru jsou k dispozici konstanty Součástka třídy, takže opravdu nemusíte vědět, jaké jsou hodnoty pro zarovnání vpravo a vlevo. Pomáhá však vědět, jestli byste chtěli něco mezi tím.

Abychom předvedli pravou, levou, středovou povahu tlačítek různých velikostí ve svislém poli, vytvoří následující program tři pole, z nichž každé je vyplněno levým, středovým a pravým zarovnaným tlačítkem.

importovat java.awt. *; importovat javax.swing. *; veřejná třída 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čítko JButton = nové JButton (štítek); button.setAlignmentX (zarovnání); box.add (tlačítko); } návratové pole; } private static String makeLabel (String s, int length) {StringBuffer buff = new StringBuffer (length); pro (int i = 0; i

Pojďme si to trochu promíchat a mít jedno vertikální pole se třemi tlačítky, jedno pro každé zarovnání. Šířka obrazovky bude široká, aby bylo zajištěno, že je k dispozici více místa. Konceptuálně by se dalo očekávat, že komponenta s levým zarovnáním bude zarovnána nalevo od kontejneru a ta s pravým zarovnáním bude zarovnána k pravé straně kontejneru. To by však bylo špatné. Pokud existují různá zarovnání komponent, jsou zarovnána do středu kontejneru. Takže pro zarovnání doleva bude mít tato komponenta levý okraj na neviditelné středové čáře kontejneru. Pro správné zarovnání je to pravý okraj.

Zde je program k předvedení:

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

A potvrzující obrazovka:

Práce v opačném směru má horní zarovnání, které zarovná horní část komponenty k imaginární středové linii, nebo jinými slovy pod středem.

Smíchání zarovnání tímto způsobem funguje dobře, ale jen si trochu zvykne, protože zarovnání nemusí být nutně tam, kde byste to očekávali, pokud nejsou všechna zarovnání stejná, a pak se zarovná k hranici kontejneru, na rozdíl od středové čáry kontejneru.

Pokud jste stále zmatení, neváhejte upravit dřívější programy a vyzkoušet ještě více kombinací X a y zarovnání. Samozřejmě, pokud vás to všechno zmátlo, vždy existuje GridBagLayout.

******

Chat SDN: Seznamte se se spisovateli webu java.sun.com

Připojte se k nám ve čtvrtek na vývojářském hřišti Sun v Second Life, 14. února v 10 hodin PST potkat autory webu java.sun.com. Ed Ort, Dana Nourie, Janice Heiss a Laureen Hudson budou ve světě, aby písemně diskutovali o svých dobrodružstvích pro jeden z nejpopulárnějších webů v tomto odvětví a sdíleli technologie a trendy, na které budou v roce 2008 dohlížet. A pro poprvé společnost SMI Press s potěšením nabízí účastníkům jednu ze tří nových knih SMI Press zdarma!

Tento příběh, „Seznámení s BoxLayout“, původně publikoval JavaWorld.

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