Haszprus

Java eseménykezelés

©   Haszprus   |   hwsw
Jut eszembe, ne felejtsem leblogolni, hogy Javaban az eseménykezelést az az ablakelem tudja végezni, amelyiken rajta van a fókusz. Az eseménykezelést ehhez az elemhez nekünk kell leprogramozni, meg kell mondani, hogy ha az OK gombon van a fókusz, akkor figyelheti a billentyűzetet, és tud is mit kezdeni pl. egy Enterrel. De ha a fókusz olyan ablakelemre kerül, amihez nem társítottunk eseményfigyelést, akkor az ipse hiába nyomkod akármilyen billentyűket, nem fog történni semmi. Ilyen módon az összes ablakelemhez hozzá kell társítanunk az eseménykezelés lehetőségét, ami nem más, mint szánalmas

RSS: hozzászólások ehhez a bejegyzéshez 18 hozzászólás

Szólj hozzá Te is!


Nem lenne "enyhén" logikusabb ha a window form figyelné a billentyűleütéseket?

Miért kell nekem a cancelhez, az ok-hoz meg az apply gombhoz is hozzárendelnem ugyanazt a billentyűleütés-figyelő cuccot?

esetleg írj olyan event handlert, amilyet akarsz. mondjuk lehet, hogy nem egyszerű, nem tudom, java-ben nem kellett hálistennek gui-val foglalkoznom. de tutira nem is lehetetlen

Ez szép dolog de ha meg is oldható (amit egyelőre nem tudok mert nem vagyok java programozó és még csak nem is érdekel különösebben), miért nem úgy van defaultból ahogy említettem?

Az előadónk is kénytelen volt erre a felvetésre elismerni, hogy hát igen, ez nem túl szép dolog a javatól

ez nem ilyen mögélátom nyelv. az van, amit te akarsz, és nem az, amit ő. épp ez benne a jó.

Szóval miből is állt volna úgy megoldani hogy a form kapja az eventeket, ne pedig az egyes gombok már amennyiben hozzárendelek eseményfigyelést?

annyiból, hogy a java nem gui-orientált bedrótozott valami.

te Haszprus, nekem defaultból megy az Enter Java-ban. Swing alatt: frame.getRootPane.setDefaultButton(eztagombot);

izé. frame.getRootPane()...satöbbi

Nem az a lényeg hogy melyik a default hanem hogy ha nincs eventhandleren a fókusz akkor beszoptad, kénytelen vagy hozzáadni az eventhandler osztályt (vagy nem emléxem má de valszeg ez volt a neve) az összes gombhoz.


de épp ez az, hogy az Enter-re nem kell eventhandlert írogatni, erre jó a setDefaultButton.
btw mi ez az EventHandler dolog egyáltalán? régen Java-ztam már, de ott nem listener-ek vannak úgy alapban? ez az event handler nem valami alacsonyabb szintű dolog?

Nem tudok a kérdéseidre válaszolni, mert nem figyeltem kellően előadáson. De valóban, lehet hogy valami listenerről volt szó, KeyListener talán. A lényeg hogy azt hozzá kell adni minden gombhoz.
button.addkeylistener vagy valami ilyesmi, mint előbb írtam nem emléxem.

Viszont oké hogy lesz egy gombod ami lenyomódik enterre, de hogy hajt az végre bármit is? Szal azon kívül hogy grafikailag lenyomódik, hogy rendelsz hozzá futtatandó kódot?…

AFAIK gomboknál van olyan, hogy ActionListener. ez akkor hajtódik végre, ha "izgatod" a gombot akár egérrel (megnyomod), akár billentyűzettel (hotkey, gomb fókuszálása mellett Space, vagy csak úgy simán Enter, ha a gomb a default). ergo azengombom.addActionListener. asszem van valami action string, amit ilyenkor a gomb elküld a listenernek, így lehet több gombra ugyanazt a listenert aggatni, és a string alapján disztingválni.

Naszóval minek kell a gombokra ráaggatni ezeket egyesével? Miért nem lehet a window formra? Mennyivel frankóbb lenne!

gondolom ojjektumorientált szemlélet. a window-nak semmi köze ahhoz, hogy a gombnyomásra mit csinálsz, maximum a gombnak van hozzá köze.

ez az "ojjektumorientált szemlélet" egyébként kiváló buzzword, bármikor el lehet lőni, amikor azt akarja mondani az ember, hogy "mert így van, és kész" de szerintem ez itt kivételesen tényleg így logikus. van sok hülyesége a Java-nak, de én ezt még soha nem találtam zavarónak.

Hmm ez egy roppant érdekes érvelés amit mondasz, eddig olyanokat hallottam hogy hát ez így nem túl objektumorientált meg ronda meg fasság (és szerintem is). De amit mondasz az valahogy tud logikus lenni.

Viszont ha logikus, akkor azt bizonyítja, hogy az objektumorientáltság sux Mert nyilvánvalóan egyszerűbb lenne az élet ha nem kellene minden egyes gombhoz hozzárendelni egy listenert.

De várjunk már. Akkor felteszek egy kérdést:

Mi köze a gombjaimnak ahhoz, hogy a fókusz olyan gombra esik éppen, amin nincs listener?!

Ez a probléma előadáson akkor jött elő, amikor a kukac játék (nem haraphat a saját farkába, nem ütközhet falnak, négy irányba mehet, stb) volt a példa.

Volt az ablakban maga a játék, meg két gomb: indít, vége.

És ha nem ezeken volt a fókusz, akkor hiába nyomkodtál le-fel-jobbra-balra gombokat, mert nem kapta meg őket a kukac. Ez milyen fasság? Mi köze az indít és vége gombnak ahhoz, hogy tudom-e a kukacot irányítani?
Hozzászólásod:


Nem vagy bejelentkezve, de...

A)
hozzászólhatsz regisztrálatlanul...

B)
ha regisztrálva vagy, bejelentkezhetsz...