[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