Java layoutit Juha Järvensivu juha.jarvensivu@tut.fi 2007
Layout
Container Container LayoutManager Component Component Component
Komponentin koko minimikoko setminumumsize(dimension d) Useimmat layoutmanagerit pyrkivät noudattamaan minimikokoa maksimikoko setmaximumsize(dimension d) Useimmat Layoutmanagerit eivät huomioi maksimikokoa oletuskoko setpreferredsize(dimension d) Kertoo käyttöliittymäkomponentin optimaalisen koon
Komponentin sijainti void setlocation(int x, int y); void setbounds(int x, int y, int w, int h); Asettaa komponentin vasemman ylänurkan koordinaatit Kutsutaan yleensä layoutmanagerin toimesta
Layoutmanagerin asettaminen JPanel panel = new JPanel(); panel.setlayout(new FlowLayout()); panel.add( button1 ); panel.add( button2 );
LayoutManagereja 1. BorderLayout 2. FlowLayout 3. CardLayout 4. GridLayout 5. GridBagLayout 6. SpringLayout 7. BoxLayout
BorderLayout Jakaa ikkunan viiteen alueeseen Ikkunaa suurennettaessa CENTER-alueen komponentti kasvaa Oletuksena ContentPane-komponentilla PAGE_START LINE_START CENTER LINE_END PAGE_END
Komponentin lisääminen public void add(component comp, Object constraints) panel.add(button, BorderLayout.PAGE_START); PAGE_START CENTER LINE_START LINE_END PAGE_END (NORTH) (CENTER) (WEST) (EAST) (SOUTH) http://java.sun.com/j2se/1.5.0/docs/api/java/awt/borderlayout.html
Komponenttien välit BorderLayout.setVgap(int) Määrittää vierekkäisten komponenttien välisen etäisyyden BorderLayout.setHgap(int) Määrittää komponenttien välisen etäisyyden pystysuunnassa
FlowLayout Yksinkertaisin layoutmanageri Asettelee komponentit järjestyksessä vasemmalta oikealle ja ylhäältä alas JPanel-luokka käyttää oletuksena Käyttää komponenttien piirtoon niille määritettyä oletuskokoa (preferredsize) Comp1 Comp2 Comp3 Comp4 Comp5 Comp6
FlowLayout sethgap, setvgap setalignment(int a) LEFT Comp1 Comp2 RIGHT Comp1 Comp2 CENTER Comp1 Comp2 http://java.sun.com/j2se/1.5.0/docs/api/java/awt/flowla yout.html
CardLayout Mahdollistaa näytön jakamisen useiden komponenttien kesken Vastaava toiminto saadaan aikaiseksi käyttämällä välilehtikomponenttia (Tabbed panes)
CardLayout
CardLayout addlayoutcomponent(string name, Component comp); show(container parent, String name); http://java.sun.com/j2se/1.5.0/docs/api/java/ awt/cardlayout.html
GridLayout Järjestää komponentit grid-muotoon (riveihin ja sarakkeisiin) GridLayout(int rows, int columns) Jos komponenttien määrä ylittää asetetun solujen määrän, oletuksena sarakkeiden määrä kasvaa row = 0; rivien määrää ei ole rajattu column = 0; sarakkeiden määrää ei ole rajattu Vähintään toinen arvoista oltava 0 Comp1 Comp2 Comp3 Comp4 Comp5 Comp6
GridLayout Kaikki komponentit ovat saman kokoisia Ikkunan koon muutos muuttaa myös komponenttien kokoja Komponentit lisätään oletuksena rivi kerrallaan vasemmalta oikealle http://java.sun.com/docs/books/tutorial/uiswing/layout/grid.html
GridBagLayout Käytetään monimutkaisten layouttien yhteydessä, kun ikkunassa on paljon komponentteja Jakaa ikkunan riveihin ja sarakkeisiin Sarakkeet / rivit voivat olla eri levyisiä Yksittäinen komponentti voi sijaita usealla rivillä Yksi joustavimmista mutta monimutkaisimmista layoutmanagereista http://java.sun.com/j2se/1.5.0/docs/api/java/awt/gri dbaglayout.html
GridBagLayout
GridBagLayout
GridBagContraints Määrittelee miten komponentti käyttäytyy ikkunassa JPanel pane = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); pane.add(thecomponent, c);
GridBagContraints int gridx, gridy Kertoo mihin soluun komponentti sijoitetaan int gridwidth, gridheight Kertoo kuinka monta solua komponentille varataan tilaa
GridBagConstraints Anchor Asettaa komponentin sijainnin, jos komponentti on pienempi kuin sille varattu tila Button 1
GridBagContraints Fill Kertoo muutetaanko komponentin kokoa, jos komponentti eri kokoinen kuin sille varattu tila NONE Button 1 HORIZONTAL VERTICAL Button 1 BOTH Button 1
GridBagContraints ipadx, ipady Kertoo kuinka paljon ylimääräistä tilaa komponentille varataan minimikoko = comp.minimumwidth+ipadx insets Kertoo kuinka paljon ylimääräistä tilaa komponentin ympärille varataan Insets(int top, int left, int bottom, int right)
GridBagContraints weightx, weighty Arvo normaalisti välillä 0.0 1.0 Kertoo miten käytettävissä oleva tila jaetaan komponenttien kesken Button 1 (weighty = 0.33) Button 2 (weighty = 0.66)
BoxLayout Asettelee komponentit riviin tai sarakkeeseen Ottaa huomioon komponentin maksimikoon http://java.sun.com/docs/books/tutorial/uiswi ng/layout/box.html
BoxLayout
Box Lightweight-container, joka käyttää BoxLayout-objektia layoutmanagerina Box.createVerticalBox() Box.createHorizontalBox() Box.createVerticalStrut(int height) Luo näkymättömän kiinteänkokoisen komponentin
SpringLayout v1.4 Käytetään erityisesti GUI-builderien yhteydessä Erittäin joustava layoutmanageri, joka osaa emuloida muita layoutmanagereita http://java.sun.com/docs/books/tutorial/uiswi ng/layout/spring.html
SpringLayout
Layout - tutorial Java-layout tutoriaali http://java.sun.com/docs/books/tutorial/uiswin g/layout/visual.html Esimerkkejä layoutmanagerien käytöstä http://java.sun.com/docs/books/tutorial/uiswin g/layout/layoutlist.html
Layoutmanagerin valinta Jos halutaan komponentti joka venyy ikkunan kokoa muutettaessa ja ottaa itselleen kaiken saatavilla olevan tilan BorderLayout FlowLayout CardLayout GridLayout GridBagLayout SpringLayout BoxLayout
Layoutmanagerin valinta Halutaan näyttää vähän komponentteja niiden oikeassa koossa (preferredsize) BorderLayout FlowLayout CardLayout GridLayout GridBagLayout SpringLayout BoxLayout
Layoutmanagerin valinta Halutaan näyttää muutamia komponentteja rivi/sarakemuodossa. Kaikki komponentit ovat saman kokoisia. BorderLayout FlowLayout CardLayout GridLayout GridBagLayout SpringLayout BoxLayout
Layoutmanagerin valinta Halutaan esittää muutamia komponentteja rivi / sarakemuodossa, mutta komponentit ovat eri kokoisia. BorderLayout FlowLayout CardLayout GridLayout GridBagLayout SpringLayout BoxLayout
Layoutmanagerin valinta Monimutkainen layout, jossa paljon komponentteja BorderLayout FlowLayout CardLayout GridLayout GridBagLayout SpringLayout BoxLayout
Layoutmanagerit ja paneelit Panel-luokkien avulla on mahdollista käyttää samassa ikkunassa useita layoutmanagereja Paneeli voi sisältää toisia paneeleja Jokaiselle paneelille voidaan asettaa oma layout-manageri
Container - orientation setcomponentorientation(componentorie ntation o); ComponentOrientation LEFT_TO_RIGHT RIGHT_TO_LEFT UNKNOWN
Container - orientation
Oman layoutmanagerin luominen http://java.sun.com/docs/books/tutorial/uis wing/layout/custom.html Interface LayoutManager void addlayoutcomponent(string, Component); void removelayoutcomponent(component); Dimension preferredlayoutsize(container); Dimension minimumlayoutsize(container); void layoutcontainer(container);
Ikkunan toiminta ilman layout manageria Layoutmanageriksi voidaan asettaa null, jolloin ei käytetä lainkaan layoutamageria Dokumentaatio suosittelee layoutmanagerien käyttöä (eri ympäristöt, LAF) Komponentit piirretään niihin asetetttujen koon ja sijainnin mukaisesti
Lähteitä Java layout managers http://java.sun.com/docs/books/tutorial/uiswin g/layout/visual.html http://java.sun.com/docs/books/tutorial/uiswin g/layout/using.html