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?
- 4476 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
valami ilyesmire gondoltam:
http://pastebin.com/6wcFzw72
Mint említettem nem nagyon szoktam JAVAzni, a fenti kód nem fordul le, az ziher, de szerintem megtalálod benne, amire szükséged van (vagy legalább is amennyit én hozzá tudok tenni a dologhoz).
Üdv
- A hozzászóláshoz be kell jelentkezni
getX(), getY() ?
- A hozzászóláshoz be kell jelentkezni
Ez nem játszik, mert a rádiógombon belüli koordinátákat adja vissza. Nekem meg a pane-en belüli koordináta kellene, amelyiken a kérdéses rádiógomb csücsül. Tulajdonképpen azt kellene megtudnom, hogy melyik rádiógombra kattintottak.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Ezt valami példakóddal el tudnád nekem magyarázni? Nem tanítanak programozni, csak benne van a mintatantervben, de teljesíteni azt viszont kell.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Így van, ezaz. :D
[oktatasfikazas]Kár, hogy egy félévi oktatás után nem magától értetődő, hogy ezeket a metódusokat (??) egymás után lehet fűzni.[/oktatasfikazas]
- A hozzászóláshoz be kell jelentkezni