Hogy kapom meg egy swing elem containeren belüli pozícióját?

Fórumok

Hali!

Házi feladatom egy táblajáték készítése. Játékmenet tömören: A tábla tele van rakva zsetonokkal, majd a játékos levesz egyet, illetve a levett zsetontól jobbra, és alatta levőket is leveszi. Az nyer, akinek az utolsó zseton marad.

Úgy döntöttem, hogy a táblát rádiógombokból rakom össze, valahogy így: http://pastebin.com/TiXgMNm1
A rádiógombokat egy jPane-en belül helyezi el a ciklus. A kérdés az, hogy hogy lehet megtudni egy jRadioButton pozícióját a jpane-en belül?

getPoint() a rádiógombon belüli kattintás helyét adja vissza.
getComponent() úgy láttam, hogy tartalmazza a rádiógomb pozícióját, viszont azt nem tudom hogyan lehet felhasználni.

Vagy tök hülyeséget csinálok, és merőben másképp kell a táblát is megrajzolni?

Hozzászólások

Hahó!

Javaban soha nem írtam még GUI alkalmazást, de nem hiszem, hogy jelentős mértékben eltérne a QT-től, illetve C#.NET-től e tekintetben.

Szóval ilyen helyzetekben azt szoktam csinálni, hogy a kívánt elemből (JRadioButton) származtatok egy osztályt, ami kibővíti az ősét egy index adattaggal (MyRadioButton), majd ezekből a megfelelő mennyiséget bepakolom egy GridLayoutba, illetve egy listába is, úgy, hogy amikor egy példány (i,j) koordinátákkal bekerül a GridLayoutba, akkor egy megfelelő index-függvénnyel elmentem a koordinátákat a példány index változójába. Innentől kezdve azt hiszem érthető a dolog.
Viszont ha már úgy is listába kerülnek, akkor persze fölösleges az index adattag (hiszen a listát bejárva könnyen kiszámítható), de nekem így sokkal kényelmesebb.

UI.:Biztos vagyok benne, hogy lesz aki ennél egyszerűbb megoldási javaslattal tud szolgálni.

Üdv.

Nos, be kell, hogy valljam, tökre nem értem amit írsz. Nem tudom hogy tudok osztályt származtatni a generált rádiógombnak.
Gépész hallgató vagyok, nem informatikus. Bash-ben még csak-csak elprogramozgatok, de ezt az objektumorientált izéhez semmi közöm. A tanárunk meg egy hülye idióta. Kérdeztem tőle, hogy hogyan kell megcsinálni, de csak makogott, aztán meg dolga volt.

Ha nagyon megunom, akkor manuálisan lerakok neki egy 3x3-as táblát, amin lehet külön neve a gomboknak, és nem for ciklussal generálom le.

Nem ertem miert pont radiogomb? Nem lenne jobb egy JButton, amire ravarozsolsz egy zseton bitmapet? A radiogombnak mas a megszokott szemantikaja, ezert fura hatast valtana ki, ha latnek belulok egy tablazatot. Szerintem a gombok, mint zsetonnak latszo objektumok termeszetesebben hatnak.

Amugy indexelesre en is subclassingre gondoltam, szerintem az a legegyszerubb, aztan vagy konstruktorral inicializalod, amikor pakolod oket fel (mondjuk for ciklusokkal), vagy ha van a komponensnek olyan eventje, hogy bekerul egy GridLayoutot kontenerre, es az event object a koordinatakat is megkapja, akkor ugy is jo.

Felesleges subclass-olni.
Csinaltok egy tombot a kerdeses objektumokbol (radio, gomb, barakarmi), es beallitjatok a Name tulajdonsagaba az indexet. A name tulajdonsagbol siman ki lehet olvasni az indexet, ami utan mar azt csinalsz vele, amit akarsz.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Rájöttem egy lehetséges megoldásra. Lehet, hogy programozás szempontjából nem szakszerű, de legalább működik:

e.getComponent().getLocation()

a getComponent().getBounds() azt adja vissza amit beállítottál neki a setBounds()-al, de csak akkor, ha a jatekTer layout managere null (jatekTer.setLayout(null)).
Rectangle r = e.getComponent().getBounds();
int x = r.x/20;
int y = r.y/20