Programavimas

Pažintis su „BoxLayout“

Vienas iš standartinių išdėstymo tvarkyklių, pateikiamų kartu su „Java“ platforma, yra „BoxLayout“. Tai leidžia talpykloje išdėstyti vieną komponentų eilutę ar stulpelį. Tai gali skambėti kaip ne taip sudėtingas maketavimo tvarkyklė, bet padedama Dėžė ir jo klijų bei statramsčių, jūs manote, kad to pakaks, bet jų yra dar daugiau. Vertikalus ir horizontalus pagrindinių komponentų išlyginimas leidžia dar geriau kontroliuoti komponentų padėtį talpykloje. Čia mes apžvelgsime visus šiuos aspektus.

Tipinis naudojimas

„BoxLayout“ skiriasi nuo daugumos maketavimo tvarkyklių, kurioms tiesiog reikia sukurti maketo tvarkyklę ir susieti maketavimo tvarkyklę su Konteineris. Vietoj to, „BoxLayout“ konstruktorius reikalauja, kad jūs išlaikytumėte Konteineris į maketavimo tvarkyklės konstruktorių, tokiu būdu turėdami nuorodą į kitą komponentą kiekviename iš jų. Kartais tai gali būti nepatogu ir dėl to naudojamas Dėžė konteineris populiaresnis, nes jums tereikia paprašyti horizontaliai arba vertikaliai išdėstyto Dėžė per vieną iš jos statinis metodai:

 Langelio vertikalė = Box.createVerticalBox (); Langelis horizontaliai = Box.createHorizontalBox ();

Abu naudojasi „BoxLayout“ po dangčiais, uždedami papildomi komponentai ant tinkamos prieigos, atsižvelgiant į kryptį. Vertikali dėžutė viską sutalpina į vieną stulpelį, o horizontali - viską iš eilės. Lyginant „BoxLayout“ (ir tokiu būdu Dėžė) iki „GridLayout“ reikalauja greito komentaro. Įdėdami daugybę komponentų į a „GridLayout“ kontroliuojamo konteinerio, tikimasi, kad visi komponentai bus vienodo dydžio. Su „BoxLayout“, tai nėra tas atvejis, o didžiausias pageidaujamas komponento dydis yra gerbiamas.

Statramsčiai ir klijai

„Box“ klasėje siūloma sukurti du atraminius komponentus, vieną statramsčio arba fiksuoto dydžio užpildo plotą, kitą klijus - išplečiamam plotui. Naudodami juos, galite klijais įdėti komponentus į konteinerį fiksuoto atstumo atstumu su statramsčiu arba auginimo / susitraukimo plotą, atsižvelgiant į turimą erdvę. Tą pačią užduotį galima atlikti su „GridBagConstraints“ ir „GridBagLayout“, nors ir ne taip lengvai.

Norėdami parodyti, ši pirmoji programa sukuria 25 taškų statramsčius tarp dviejų viršutinių komponentų ir 10 taškų statramstį tarp dviejų apatinių.

importuoti java.awt. *; importuoti javax.swing. *; public class VerticalBoxTest {public static void main (String args []) {JFrame frame = new JFrame ("Vertikalus langelis"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Dėžutės langelis = Box.createVerticalBox (); langelis.add (naujas mygtukas („viršuje“)); box.add (Box.createVerticalStrut (25)); langelis.add (naujas mygtukas („vidurys“)); box.add (Box.createVerticalStrut (10)); box.add (naujas mygtukas („Apačia“)); frame.add (langelis, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true); }}

Kai sukompiliuosite ir paleisite, atkreipkite dėmesį, kaip keičiasi komponentų dydis, kai lango dydis padidėja arba sumažėja. Atstumas tarp komponentų lieka nepakitęs, kad atitiktų rezervuotą statramsčio erdvę. Šiame pavyzdyje naudojamas a Mygtukas vietoj a JMygtukas kad būtų išvengta komponentų derinimo paaiškinimo tik šiek tiek vėliau.

Dirbant su horizontalia dėžute ir klijais gaunami panašūs rezultatai, nors šį kartą klijai auga, kad užimtų papildomą vietą, o ne liktų fiksuoto dydžio su statramsčiu.

importuoti java.awt. *; importuoti javax.swing. *; public class HorizontalBoxTest {public static void main (String args []) {JFrame frame = new JFrame ("Horizontali dėžutė"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Dėžutės langelis = Box.createHorizontalBox (); box.add (Box.createHorizontalGlue ()); langelis.add (naujas J mygtukas („kairysis“)); box.add (naujas JButton („Dešinysis“)); frame.add (langelis, BorderLayout.NORTH); langelis = Box.createHorizontalBox (); langelis.add (naujas J mygtukas („kairysis“)); box.add (Box.createHorizontalGlue ()); box.add (naujas JButton („Dešinysis“)); frame.add (langelis, BorderLayout.CENTER); langelis = Box.createHorizontalBox (); langelis.add (naujas J mygtukas („kairysis“)); box.add (naujas JButton („Dešinysis“)); box.add (Box.createHorizontalGlue ()); frame.add (langelis, BorderLayout.SOUTH); frame.setSize (300, 200); frame.setVisible (true); }}

Bandymas jūsų per daug nesupainioti, tačiau pavyzdys vėl naudojamas JMygtukas komponentai.

Lygiavimas

Gyvenimas tampa įdomus „Box / BoxLayout“ kai konteinerio komponentai yra kitokio dydžio arba konteinerio aukštis / plotis yra platesnis, nei reikia vertikaliai dėžei, arba aukštesnis, nei reikia horizontaliai. Kitaip tariant, jei turite aukštą stulpelį, kur atsiduria skirtingo pločio komponentai? O jei turite plačią eilę su skirtingo aukščio komponentais, kaip su jomis?

Čia atsiranda skirtingi komponento derinimai. Kiekvienas „Swing“ komponentas turi X derinimas nustatymas ir a Y lygiavimas nustatymas jo dėka get / setAlignmentX () ir get / setAlignmentY () metodai. Kiekvieno nustatymo diapazonas yra nuo 0 į 1.0, imtinai, kur 0 žymi kairiosios arba viršutinės dalies derinimą ir 1 reiškia dešinįjį arba apatinį lygiavimą, atsižvelgiant į kryptį „BoxLayout“. Yra konstantos, esančios Komponentas klasės, todėl jums tikrai nereikia žinoti, kokios yra dešinės ir kairės lygiavimo vertės. Tačiau tai padeda žinoti, ar galbūt norėsite kažko tarp jų.

Norėdami parodyti vertikaliame langelyje esančių skirtingų dydžių mygtukų dešinįjį, kairįjį ir centrinį pobūdį, ši programa sukuria tris langelius, po vieną užpildytą kairiuoju, viduriniu ir dešiniuoju lygiu mygtukais.

importuoti java.awt. *; importuoti 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 mygtukas = naujas JButton (etiketė); mygtukas.setAlignmentX (lygiavimas); langelis.add (mygtukas); } grąžinimo dėžutė; } private static String makeLabel (String s, int length) {StringBuffer buff = naujas StringBuffer (ilgis); už (int i = 0; i

Dabar šiek tiek sumaišykime daiktus ir turėkime po vieną vertikalų langelį su trimis mygtukais, po vieną kiekvienam lygiavimui. Ekrano plotis bus platus, kad įsitikintumėte, jog yra laisvos vietos. Konceptualiai galvojant, galima tikėtis, kad komponentas su kairiuoju lygiuote bus sulygintas kairėje talpyklos pusėje, o tas, kurio lygiuotė yra dešinėje, - dešinėje. Vis dėlto tai būtų neteisinga. Kai yra skirtingų komponentų išlygiavimas, jie sulyginami su talpyklos centru. Taigi, norint sulygiuoti kairę, tas komponentas turės kairįjį kraštą nematomoje talpyklos vidurio linijoje. Norint išlyginti teisingai, jis yra dešinysis kraštas.

Štai programa, pademonstruojanti:

importuoti java.awt. *; importuoti javax.swing. *; public class AlignX2 {public static void main (String args []) {JFrame frame = new JFrame ("X Alignment"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Dėžutės langelis = Box.createVerticalBox (); JButton mygtukas = naujas JButton ("LL"); mygtukas.setAlignmentX (komponentas.LEFT_ALIGNMENT); langelis.add (mygtukas); mygtukas = naujas J mygtukas („CC“); mygtukas.setAlignmentX (komponentas.CENTER_ALIGNMENT); langelis.add (mygtukas); mygtukas = naujas J mygtukas („RR“); button.setAlignmentX (Component.RIGHT_ALIGNMENT); langelis.add (mygtukas); frame.add (langelis, BorderLayout.CENTER); frame.setSize (300, 200); frame.setVisible (true);}} 

Patvirtinantis ekranas:

Dirbant kita kryptimi, viršutinė dalis išlygiuojama, sulyginant komponento viršų su įsivaizduojama vidurio linija arba, kitaip tariant, žemiau centro.

Maišymas tokiu būdu veikia gerai, tačiau tam reikia šiek tiek priprasti, nes lygiavimas nebūtinai yra toks, kokio galite tikėtis, nebent visi išlyginimai yra vienodi, o tada jis sulygiuotas su konteinerio kraštu, priešingai nei konteinerio vidurio linija.

Jei vis dar nesuprantate, nedvejodami modifikuokite ankstesnes programas ir išbandykite dar daugiau jų derinių x ir y derinimas. Žinoma, jei visa tai jus glumina, visada yra „GridBagLayout“.

******

SDN pokalbis: susipažinkite su java.sun.com rašytojais

Prisijunkite prie „Sun“ kūrėjų žaidimų aikštelės „Second Life“ ketvirtadienį, Vasario 14 d., 10 val. PST susitikti su java.sun.com rašytojais. Edas Ortas, Dana Nourie, Janice Heissas ir Laureenas Hudsonas bus pasaulis, kuris raštu aptars savo nuotykius vienoje populiariausių industrijos svetainių ir pasidalins technologijomis ir tendencijomis, į kurias jie žiūrės 2008 m. pirmą kartą „SMI Press“ malonu pasiūlyti dalyviams vieną iš trijų naujų „SMI Press“ knygų nemokamai!

Šią istoriją „Pažintis su„ BoxLayout “iš pradžių paskelbė„ JavaWorld “.

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