[Java lista] swing dialog meretenek automatizalasa

istvan.ketler at lhsystems.com istvan.ketler at lhsystems.com
2007. Jan. 22., H, 10:10:20 CET


> egyszeru dialog (BorderLayout), benne ket masik panel (NORTH,SOUTH).
> A felsoben az elemek, az alsoban ket gomb (OK,Cancel) 
> Midketto GridbagLayout. Minden elemnek csak az inset 
> parametereit allitgatom, meretet sehol sem. Eclipse Visual 
> Editorral csinaltam.

Izééé... Ezt hogy érted? Mert ismereteim szerint az insets property az AWT konténerek esetén read-only, így módosítása csak a getInsets() újradefiniálásával lehetséges. Ezen pedig a swing sem változtatott. Amúgy sem értem, hiszen az insets nem a komponens méretét vezérli, csupán a köré írt üres hely nagyságát.

Ráadásul azt állítják, hogy "Swing components do not override getInsets()". (Kivéve a JViewport-ot, mivel ő nem enged magára bordert tenni, ezért ezt a metódust is override-olja). Azt is mondják, hogy "custom components built using Swing should follow suit". Röviden: a swing komponensek nem definiálják újra ezt a metódust, és a saját komponenseknek sem kellene. Amúgy a swing a border-t használja erre a célra, és amikor megkérdezik tőle a getInsets() méretet, akkor a border insets-et adják vissza a swing komponensek. Így lehet kívülről állítani az insets-ét (tul.képpen a setBorder-rel).

Másrészt a layout manager-ek - már amelyiket érdekli - pont a (preferált) méretet kérdezik le, és annak alapján méreteznek. Ha pedig azt nem változtatod, csak az insets-et, akkor előállhat az a helyzet, hogy beállítja mondjuk a gombot a preferált méretére, leveszi belőle az insets-et, és a maradék kicsi helyre próbálja meg kiírni a komponenst...

Mindenesetre ha rugalmas layout manager-t akarsz, akkor a formlayout nekem nagyon bejön. (Igaz, hogy nem kedvelem a GUI editorokat, és kézzel rakom össze a paneljaimat, szóval könnyű nekem kedvelni a jó, értsd ember által megérthető és használható layout manager-eket...) Filozófiáját tekintve némileg emlékeztet a GridBagLayout-ra.

Tulajdonképpen van egy rácsod, minden cellájára megmondhatod, hogyan akarod benne igazítani a komponenst, és hogyan akarod méretezni. Ez megadható sorra és oszlopra általánosan, de bármelyik cella esetén felülírható. Egy cellában csak egy elem lehet; bármely elem kiterjedhet több oszlopra vagy sorra (több cellát foglal el). Létezik rövid (string-es) inicializálása is, de szerintem az később nehezen olvasható; nekem egy bőbeszédűbb módszer jön be jobban (egymás után "hozzáadom" az oszlopokat és sorokat a layout-hoz - vagyis definiálom ezeket, majd a panel-hez hozzáadáskor sorra hozzárendelem a komponenseket a megfelelő cellákhoz).

http://www.jgoodies.com/freeware/forms/

Készíthetsz mondjuk olyan oszlopokat, amelyek szélessége a bennük lévő legszélesebb komponens méretével egyezik meg (preferred size-ot kérdez tőlük). Ezek a komponensek lehetnek valamerre igazítva ezen a szélességen belül, de ki is töltetheted velük a rendelkezésre álló helyet. Ugyanez sorokra is igaz, persze értelemszerűen "magasság" áll a "szélesség" helyén.

Egyébként ha időd engedi, érdemes belepillanatani, eseteg később megfontolni a megvásárlását. Szerintem érdekes olvasmány mindkettő. Ha sokat kell GUI-t tervezned, és internacionalizálnod, akkor különösen megéri. (Online olvasható, vagy könyvként megvásárolható):

http://java.sun.com/products/jlf/

Üdvözlettel,

Iván


További információk a(z) Javalist levelezőlistáról