Táblára fel!

A különböző programok grafikai felületeinek programban való implementálása nem egyszerű, főleg, ha nincs kéznél valamilyen grafikus fejlesztői felület (API). Nincs ez másként akkor sem, ha Java nyelven akarunk grafikus kezelői felületet (GUI) megjeleníteni, elhelyezni. Ennek megkönnyítésére szolgál a TableLayout elrendezés-kezelő (LayoutManager).

A beépített (SDK-val szállított) Java-s elrendezés-kezelők használata egyszerűnek tűnik, de sokszor nem a kívánt eredményt adják, amikor programunk különböző grafikus elemeit szeretnénk megjeleníteni az általunk elképzelt pozícióban. A feladat nehezedik, ha az ablak, amiben a grafikus elemeket elhelyeztük átméretezhető, mivel ekkor az átméretezett ablak új méreteinek megfelelően kell felrakni az objektumokat.

A beépített LayoutManager-ek valamennyit enyhítenek a problémánkon, de sajnos ezek használata sem a kívánt eredményt adja minden esetben, ráadásul a kezdő programozók számára nehézkes a használatuk. Ezek közül BorderLayout és a FlowLayout használata általában használható eredményt adnak, de nem nagyon népszerű, mivel használatuk komplikált és nehezen kitalálható eredményt ad.

Ennek áthidalására használható a TableLayout (TL). A GUI-t egyszerű táblázatként kell megtervezni, és az egyes elemeket "beledobáljuk" a nekik kitalált cellákba. Ha ez a megközelítés elsőre nem tűnik világosnak, álljon itt egy példa:

Mint ahogy a példán látszik, elemeket tartalmaz 3 sorban és 2 oszlopban és ezen elemek teljesen kitöltik a rendelkezésre álló területet. Ilyenfajta elrendezés létrehozása talán a legegyszerűbb a TL  segítségével. Egyszerűen beállítjuk, hogy hány sora, és hány oszlopa legyen a táblázatunknak, és az elemeket egyszerűen hozzáadjuk - balról jobbra haladva soronként. Álljon az előző példához itt egy minta:

TableLayout tableLayout;

Panel panel = new Panel();

tableLayout = new TableLayout(3, 2);

panel.add(new Label("Név:"));

panel.add(new TextField());

panel.add(new Label("Jelszó:"));

panel.add(new TextField());

panel.add(new Button("OK"));

panel.add(new Button("Mégse"));

panel.setLayout(tableLayout);

Amint látjuk az elrendezés kezelése egészen egyszerű. Kicsit testre szabhatjuk a dolgokat, mivel a TL-tot elég könnyen lehet konfigurálni.

A cellák között beállíthatunk hézagokat (gap) mind függőlegesen, mind vízszintesen. Az alábbi példában a fenti táblázatot 5 pixeles vízszintes, és 4 függőleges hézaggal módosítjuk.

tableLayout = new TableLayout(3, 2, 5, 4);

A hézagokon felül beállíthatjuk az egész táblázat elemeinek elrendezését mind függőlegesen, mind vízszintesen. Ekkor az egyes cellákban levő elemek a meghatározott módon kerülnek elrendezésre úgy, hogy nem töltik ki teljesen a rendelkezésre álló terültet. Az alábbi értékeket használhatjuk függőleges elrendezésre: TOP, BOTTOM, CENTER, FILL. Ezen értékek használatakor az elemek felülre, alulra, középre, vannak rendezve, illetve teljesen kitöltik a területet. Vízszintesen hasonlóan: LEFT, RIGHT, CENTER, FILL használatakor balra, jobbra, középre, illetve teljesen kitöltve jelennek meg az elemek. Az alábbi példa a fenti táblázat elemeit vízszintesen balra, függőlegesen középre rendezi:

tableLayout = new TableLayout(3, 2,

                  TableLayout.LEFT, TableLayout.CENTER, 5, 4);

A teljes táblázaton kívül formázhatjuk az egyes sorokat, oszlopokat, sőt, magukat a cellákat is. Erre szolgál a setRowAlignment(sor, vElrendezés, fElrendezés), setColumnAlignment(oszlop, vElrendezés, fElrendezés), illetve a setAlignment(sor, oszlop, vElrendezés, fElrendezés).

Táblázatunkat tovább fűszerezhetjük az egyes sorok és oszlopok méretének relatív megadásával. Mivel a TL minden sora és oszlopa olyan méretű alapértelmezésben, mint a legnagyobbé, ezért gyakran lehet szükségünk arra, hogy ezeket a többi méretétől függően beállíthassuk. Az egyes soroknak és oszlopoknak beállíthatjuk, hogy százalékban hogy viszonyulnak a többihez. A következő példa az második oszlop szélességét a többi 150%-ára állítja:

tableLayout.setColumnScale(1, 1.50);

Ha az oszlopok és sorok méretének pontosabb beállítására van szükségünk, például tudjuk, hogy az abban levő elem(ek) magassága ill. szélessége pontosan mekkora lesz, vagy azt szeretnénk, hogy a sorok, oszlopok magassága, illetve szélessége pontosan akkora legyen, mint kitaláltuk, akkor a következő függvényeket használhatjuk: setRowSize(oszlopSzám, magasság), setColumnSize(oszlopSzám, szélesség).

A táblázat köré margókat rakhatunk, ezzel tovább közelíthetünk a kívánt megjelenéshez a setMargins(felsőMargó, balMargó, alsóMargó, jobbMargó) függvénnyel. További hasznos kiterjesztése a TableLayout-nak a RowLayout, a ColumnLayout és a CellLayout. Az első egy sor, a második egy oszlop, míg az utolsó egy cella elemeinek elhelyezését teszi lehetővé. Ezen osztályok megkönnyíthetik a TableLayout-ban történő elrendezést könnyebb parméterezhetőségük révén.

Ha az itt említett táblázatos formánál bonyolultabb elrendezésű az ablakunk, akkor ezen az egyes táblázatok egymásba ágyazásával segíthetünk.

Jó munkát a "táblázáshoz"!

Galiba Péter