Programmēšana

Iepazīšanās ar BoxLayout

Viens no standarta izkārtojuma pārvaldniekiem, kas nāk ar Java platformu, ir BoxLayout. Tas ļauj konteinerā izkārtot vienu komponentu rindu vai kolonnu. Tas var izklausīties kā ne tik sarežģīts izkārtojuma pārvaldnieks, bet ar Kaste un tā līme un statņi, jūs domājat, ka ar to pietiks, bet to ir vēl vairāk. Pamata komponentu vertikālā un horizontālā izlīdzināšana ļauj vēl vairāk kontrolēt sastāvdaļu izvietojumu konteinerā. Šeit mēs apskatīsim visus šos aspektus.

Tipisks lietojums

BoxLayout atšķirībā no lielākās daļas izkārtojumu pārvaldnieku, kas vienkārši prasa izveidot izkārtojuma pārvaldnieku un saistīt izkārtojuma pārvaldnieku ar Konteiners. Tā vietā BoxLayout konstruktors prasa, lai jūs nokārtotu Konteiners izkārtojuma pārvaldnieka konstruktorā, tādējādi katrā no tām ir norāde uz otru komponentu. Dažreiz tas var būt neērti, un tas izmanto Kaste konteiners ir populārāks, jo viss, kas jums jādara, ir lūgt horizontāli vai vertikāli izkārtotu Kaste caur vienu no tās statisks metodes:

 Kastes vertikāls = Box.createVerticalBox (); Kastīte horizontāla = Box.createHorizontalBox ();

Abi izmanto BoxLayout zem pārsegiem, novietojot pievienotos komponentus pareizai piekļuvei, atkarībā no virziena. Vertikālā lodziņā viss tiek ievietots vienā kolonnā, savukārt horizontālā lodziņā viss tiek novietots pēc kārtas. Salīdzinot BoxLayout (un tādā veidā Kaste) līdz GridLayout prasa ātru komentāru. Ievietojot virkni komponentu a GridLayout kontrolējamā konteinerā, paredzams, ka visi komponenti būs vienāda izmēra. Ar BoxLayout, tas tā nav, un tiek ievērots komponenta maksimālais vēlamais lielums.

Balsti un līmes

Box klase piedāvā izveidot divus atbalsta komponentus, vienu statnes vai fiksēta izmēra pildvielas laukumu, otru līmi paplašināmai vietai. To izmantošana ļauj ar līmi ievietot komponentus konteinerā, fiksēta attāluma attālumā ar balstu vai augšanas / saraušanās zonā, pamatojoties uz pieejamo vietu. To pašu uzdevumu var veikt ar GridBagConstraints un GridBagLayout, kaut arī ne tik viegli.

Lai parādītu, šī pirmā programma izveido 25 pikseļu statni starp diviem augšējiem komponentiem un 10 pikseļu balstu starp diviem apakšējiem komponentiem.

importēt java.awt. *; importēt javax.swing. *; publiskā klase VerticalBoxTest {public static void main (String args []) {JFrame frame = new JFrame ("Vertical Box"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Kastīte = Box.createVerticalBox (); box.add (new Button ("Top")); box.add (Box.createVerticalStrut (25)); box.add (new Button ("Middle")); box.add (Box.createVerticalStrut (10)); box.add (new Button ("Bottom")); frame.add (lodziņš, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true); }}

Kad esat to apkopojis un palaidis, ievērojiet, kā komponentu izmērs mainās, kad loga izmērs palielinās vai samazinās. Attālums starp komponentiem paliek nemainīgs, lai tas atbilstu rezervētajai statņa vietai. Šajā piemērā tiek izmantots a Poga a vietā JPoga lai izvairītos no detaļu izlīdzināšanas paskaidrojuma tikai nedaudz vēlāk.

Darbs ar horizontālu kārbu un līmi dod līdzīgus rezultātus, lai gan šoreiz līme pieaug, lai aizņemtu pievienoto vietu, nevis paliktu fiksēta izmēra, ar statni.

importēt java.awt. *; importēt javax.swing. *; publiskā klase HorizontalBoxTest {public static void main (String args []) {JFrame frame = new JFrame ("Horizontal Box"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Kastīte = Box.createHorizontalBox (); box.add (Box.createHorizontalGlue ()); box.add (jauns JButton ("Kreisais")); box.add (jauns JButton ("Pa labi")); frame.add (lodziņš, BorderLayout.NORTH); lodziņš = Box.createHorizontalBox (); box.add (jauns JButton ("Kreisais")); box.add (Box.createHorizontalGlue ()); box.add (jauns JButton ("Pa labi")); frame.add (lodziņš, BorderLayout.CENTER); lodziņš = Box.createHorizontalBox (); box.add (jauns JButton ("Kreisais")); box.add (jauns JButton ("Pa labi")); box.add (Box.createHorizontalGlue ()); frame.add (lodziņš, BorderLayout.SOUTH); frame.setSize (300, 200); frame.setVisible (true); }}

Mēģinot jūs pārāk nejaukt, bet piemērs ir atgriezies pie izmantošanas JPoga komponentiem.

Izlīdzināšana

Dzīve kļūst interesanta ar Box / BoxLayout ja konteinerā esošie komponenti ir atšķirīga izmēra vai konteinera augstums / platums ir platāks, nekā nepieciešams vertikālai kastei, vai augstāks nekā nepieciešams horizontālai kastei. Citiem vārdiem sakot, ja jums ir augsta kolonna, kur nonāk cita platuma sastāvdaļas? Un, ja jums ir plaša rinda ar dažāda augstuma komponentiem, kā tad ar tām?

Šeit parādās komponenta dažādie izlīdzinājumi. Katram Swing komponentam ir X izlīdzināšana iestatījums un a Y izlīdzināšana nosakot pateicoties get / setAlignmentX () un get / setAlignmentY () metodes. Katra iestatījuma diapazons ir no 0 uz 1.0, ieskaitot, kur 0 apzīmē kreiso vai augšējo līdzinājumu un 1 apzīmē labo vai apakšējo izlīdzinājumu atkarībā no virziena BoxLayout. Programmā ir pieejamas konstantes Komponents klase, tāpēc jums patiesībā nav jāzina, kādas ir labās un kreisās līdzināšanas vērtības. Tomēr tas palīdz zināt, vai jūs varētu vēlēties kaut ko pa vidu.

Lai parādītu dažāda lieluma pogu labo, kreiso un centrālo raksturu vertikālā lodziņā, šī programma izveido trīs lodziņus, pa vienam piepildot ar kreiso, vidējo un labo izlīdzinātu pogu.

importēt java.awt. *; importēt javax.swing. *; public class AlignX {private static Container makeIt (String labelChar, float alignment) {Box box = Box.createVerticalBox (); for (int i = 1; i <6; i ++) {Virknes etiķete = makeLabel (labelChar, i * 2); JButton poga = jauna JButton (etiķete); button.setAlignmentX (izlīdzināšana); box.add (poga); } atgriešanās kaste; } privāta statiska virkne makeLabel (virkne s, int garums) {StringBuffer buff = jauns StringBuffer (garums); par (int i = 0; i

Ļaujiet mums nedaudz sajaukt lietas un mums ir viena vertikāla kaste ar trim pogām, pa vienai katram izlīdzinājumam. Ekrāna platums būs plašs, lai pārliecinātos, ka ir pieejama papildu vieta. Konceptuāli domājot, varētu sagaidīt, ka komponents ar kreiso izlīdzinājumu tiks izlīdzināts pa kreisi no konteinera, un tas, kura izlīdzinājums ir pa labi, tiks izlīdzināts pa labi no konteinera. Tas tomēr būtu nepareizi. Ja komponentu izlīdzinājumi ir dažādi, tie tiek izlīdzināti konteinera centrā. Tātad, lai izlīdzinātu pa kreisi, šim komponentam būs kreisā mala uz konteinera neredzamās viduslīnijas. Lai izlīdzinātu pa labi, tā ir labā mala.

Lūk, programma, lai parādītu:

importēt java.awt. *; importēt javax.swing. *; public class AlignX2 {public static void main (String args []) {JFrame frame = new JFrame ("X Alignment"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Kastīte = Box.createVerticalBox (); JButton poga = jauna JButton ("LL"); button.setAlignmentX (Component.LEFT_ALIGNMENT); box.add (poga); poga = jauna J poga ("CC"); button.setAlignmentX (Component.CENTER_ALIGNMENT); box.add (poga); poga = jauna J poga ("RR"); button.setAlignmentX (Component.RIGHT_ALIGNMENT); box.add (poga); frame.add (lodziņš, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true);}} 

Un apstiprinošais ekrāns:

Strādājot citā virzienā, augšējā izlīdzināšana izlīdzina komponenta augšdaļu ar iedomāto centra līniju vai, citiem vārdiem sakot, zem centra.

Sajaukšana šādā veidā darbojas lieliski, taču ir tikai jāpierod, jo izlīdzināšana nav obligāta tur, kur jūs to varētu gaidīt, ja vien visi izlīdzinājumi nav vienādi, un pēc tam tas tiek izlīdzināts ar konteinera robežu, atšķirībā no konteinera centra līnijas.

Ja jūs joprojām esat neskaidrs, nekautrējieties modificēt iepriekšējās programmas un izmēģināt vēl vairāk to kombināciju x un y izlīdzināšana. Protams, ja tas viss jūs mulsina, vienmēr ir GridBagLayout.

******

SDN tērzēšana: iepazīstieties ar java.sun.com rakstniekiem

Lūdzu, pievienojieties mums ceturtdien Sun's Developer Playground in Second Life, 14. februārī pulksten 10 PST lai iepazītos ar java.sun.com rakstītājiem. Ed Ort, Dana Nourie, Janice Heiss un Laureen Hudson būs pasaule, lai rakstiski apspriestu savus piedzīvojumus vienā no nozares populārākajām vietnēm un dalītos tehnoloģijās un tendencēs, uz kurām viņi 2008. gadā skatīsies. pirmo reizi SMI Press ar prieku piedāvā apmeklētājiem vienu no trim jaunajām SMI Press grāmatām bez maksas!

Šo stāstu “Iepazīšanās ar BoxLayout” sākotnēji publicēja JavaWorld.

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