Java felhasználói felület Közbenső konténerek Elrendezés szervezők Elek Tibor
Konténerek Közbenső konténerek - általános célú: +JPanel: egy egyszerű konténer, plussz funkciók nélkül +JScrollPane: az egy belerakott komponenshez scrollbar-okat biztosít. +JSplitPane: ketté osztott konténer, két gyermeke lehet, biztosítja az elválasztó kezelhetőségét. +JTabbedPane: fülekkel váltogatható komponenseket tartalmazhat. +JToolbar: tool gombokat tartalmazhat
JPanel Leggyakrabban használt metódusai: Komponens műveletek: add(), remove(), getcomponentat() Layout: (alapértelmezés BoxLayout) get(set)layout() Kinézet: get(set)opaque(), get(set)border()
JScrollPane Szerep: A berakott tartalom görgetése ViewPort: a görgetendő tartalom Megadása: JScrollPane konstruktorával, setviewportview()-al pl. JTextArea t = new JTextArea(); JScrollPane s = new JScrollPane(t); vagy JScrollPane s = new JScrollPane(); s.setviewportview(t);
JScrollPane ScrollBar-ok get(set)horizontalscrollbar() get(set)verticalscrollbar() Egyéb részek: RowHeader, ColumHeader, Corners Alapértelmezés szerint üresek. Megadásuk: setcorner(), setrowheaderview(), setcolumnheaderview()
JScrollPane Görgetés A görgetés, lapozás mérete a Scrollbar setunitincrement(), setblockincrement() metódusaival állítható. (Pixelben megadva) A görgetés kódból a ScrollBar setvalue()-val. Pl. sp.getverticalscrollbar().setunitinc rement(10);
JScrollPane ScrollPane kliens - Scrollable kliens (JTextArea, JList, stb.) funkciók: Megvalósítja a Scrollable interface-t, amellyel kiszámítathatjuk a görgetés, lapozás méretét, a látható tartalom méretét, stb. az adott komponens logikájától függően. Pl. listánál a lista elemek száma alapján, text-eknél a sorok száma alapján, stb. - Az egyes Scrollable kliensek további funkciói: pl. JList: setvisiblerowcount() beállítja a viewport méretet.
JSplitPane Szerep: vízszintesen vagy függőlegesen ketté osztott panel, mozgatható elválasztóval. Orientáció: konstruktorral, setorientation() Komponensei: A két belerakott komponens gyakran JScrollPane. - belerakás: konstruktorral, settopcomponent(), (Botton, Left, Right) - méretek: fontos a komponens minimum mérete is.
JSplitPane Elválasztó: - Beállítás: Százalékosan: setdividerlocation(double), Pixelben: setdividerlocation(int) ha pontosan x pixel széles bal oldali-t akarok: sp.setdividerlocation(150 + sp.getinsets().left); ha pontosan x pixel széles jobb oldalit akarok: sp.setdividerlocation(sp.getsize().width - sp.getinsets().right - sp.getdividersize() - 150);
JSplitPane Növekedés szabály A splitpane növekedésekor milyen arányban osztozzanak a növekményen: setresizeweight() pl. setresizeweight(1.0) : azonos arányban setresizeweight(0.0) : nem változik az elválasztó pozíciója
JTabbedPane Szerep: Helytakarékos konténer. Fülekkel váltogatható tartalom. Fontosabb funkciói: Kinézet: settabplacement(): fülek helye settablayoutpolicy(): sok tabfül elhelyezés Tab kezelés: addtab(), inserttab(), removetabat(), indexoftab(), indexofcomponent() get(set)selectedindex(), get(set)selectedcomponent()
JTabbedPane Fontosabb funkciói: Tab kinézet: settitleat(): felirat, seticonat(), setdisablediconat(): ikonok, setbackgroundat(), setforegroundat(): színek, settooltiptextat(): tooltip szöveg, setmnemonicat(): mnemonic, setenabledat(): engedélyezés Saját Tab komponens: settabcomponentat()
JToolBar Szerep: Mozgatható eszköztár. Célszerű BorderLayout-os konténerben elhelyezni. Többnyire gomb gyermekek, de bármi lehet. Fontosabb funkciók: Kinézet: setfloatable(): áthelyezhető-e setorientation(): elrendezés setrollover(): jelzi ha a kurzor felé ér setmargin(): margók Komponens: add() addseparator()
Példa
Gyakorlat Készítsen egy űrlapot egy tabbed pane-nel, legyen három tab-ja. Az elsőre tegyen ki három gombot Átkapcsolás a második tabra, Harmadik tab eltávolítása/visszarakása, Második tab engedélyezése/letiltása. A második tabra tegyen egy split konténer, egyegy színezett panellel a két oldalon, valamint egy labelt, amelyben az elválasztó pozíciója látszik mindig.
Elrendezés szervezők Fajtái (javase-ben elérhetőek): Egyszerűbbek: OverlayLayout CardLayout FlowLayout BoxLayout BorderLayout GridLayout Összetettebbek: GridBagLayout GroupLayout SpringLayout
Elrendezés szervezők Működés: Kiszámolja a konténer gyerekeinek pozícióját és méretét, valamint saját szükséges méretét. Érvényes állapot, ha minden gyerek érvényes. revalidate() : érvényesítés pack() : induló állapot utáni érvényesítés
Elrendezés szervezők Beállítás: - Létrehozás XXXLayout a = new XXXLayout(); - konfigurálás - hozzárendelés a konténerhez. kont.setlayout(a); - layout specifikus információk megadása a komponens hozzáadásakor
Elrendezés szervezők OverlayLayout - Egymásra pakol - Minden elem megtartja preferált méretét
Elrendezés szervezők CardLayout - Egymásra pakol - Minden elem kitölti a területet - Térköz a komponensterület körül: Hgap, Vgap - Felül levő komponens megadása: first, last, next, previous, show - azonosító a komponenshez: az add()-ban megadható, a show()-ban felhasználható
Elrendezés szervezők FlowLayout - sorban pakol (a BoxLayout egyszerűbb változata) - Térköz a komponensek között: Hgap, Vgap - Igazítás: Alignment
Elrendezés szervezők BoxLayout - sorba pakolja vagy oszlopba - Irányultság: PAGE_AXIS, LINE_AXIS BoxLayout a = new BoxLayout(kont, BoxLayout.PAGE_AXIS); - Térközök adhatók a konténerhez: rigid area: fix méretű Box.createRigidArea() glue: változó méretű Box.createHorizontalGlue() Box.Filler: megadható min, max, preffered méret
Elrendezés szervezők BorderLayout - 5 terület fajta - a konténer add metódusában paraméter pan.add(komp, BorderLayout.PAGE_START); - Térközök: Hgap, Vgap
Elrendezés szervezők GridLayout - Táblázatba pakol - Azonos méretű cellák - Sorok, oszlopok száma: Rows, Columns - Térköz: Hgap, Vgap
Elrendezés szervezők GridBagLayout - Sorok és oszlopok definiálhatók - A komponens elhelyezéséhez Constraint (megszorítás) adható meg. GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; pan.add(btn1, c);
Elrendezés szervezők GridBagLayout - A GridBagConstraints-ben megadható: Pozíció (bal felső sarok): gridx, gridy Méret (cellában): gridwidth, gridheight Terület kitöltés: fill Kötés: anchor Padding: ipadx, ipady Belső térköz: insets Növekedési arány: weightx, weigthy
Elrendezés szervezők GroupLayout - Lásd NetBeans FreeDesign - autoresizing, anchor
Elrendezés szervezők SpringLayout - Távolsági megkötésekkel dolgozik (anchorok) pl. a txt bal oldala 5 pixelre legyen a lbl jobb oldalától: layout.putconstraint(springlayout.west, txt, 5, SpringLayout.EAST, lbl);