Sziasztok!
Szerettem volna ha egy get mezőbe történt adatbevitel
helyességét mindjárt a bevitelt követően ellenőrizni tudom.
Próbálkoztam az actionblock metódussal. Ez sajnos nem
működik a get mező elhagyásakor, kizárólag akkor hajtódik végre a block, ha entert nyomok. Ekkor viszont a fókusz nem kerül át a következő get mezőre.
Kérdéseim:
1. hogyan lehet megvalósítani a picture kódokon kívül
adatellenőrzést?
2. A get mezőben miért nem lehet az adatbevitelt a
karakteres felületen megszokott megszokott módon enter-el
végrehajtani?
- 1510 megtekintés
Hozzászólások
A kérdés jogos, valóban a terminál nem küld értesítést a fókusz elvesztéséről, ezért nem lehet olyan mezőelhagyáskor futó ellenőrzéseket írni, mint karakteres dialogboxoknál. Ez nem programozási hiba vagy feledékenység miatt van így, hanem tervezési kérdés, amit persze lehet vitatni, vagy esetleg meg lehet változtatni (bár nem szeretném). A felvetés egyébként nem új: Volt a terminálnak olyan változata, ami foglalkozott a fókuszkezeléssel, de végül ezt elvetettük.
Karakteres dialogboxban a kontrollok bejárásának sorrendje adott, GUI-ban viszont az egérrel bárhová lehet fókuszt adni.
A fókusz azért is változhat, mert a felhasználó paste-elni akar, ilyenkor az is lehet, hogy egy másik alkalmazás kapja meg a fókuszt.
Gombokat (push button) úgy is meg lehet nyomni, hogy nem kapják meg a fókuszt, következésképp az ellenőrizendő kontroll nem veszti el a fókuszt, tehát az ellenőrzés elmarad.
Ezek miatt a nehézségek miatt úgy gondoltam, hogy az ellenőrzéseket a dialogbox egészének bezárása után kell végezni. Eközben _lehetőséget_ adunk a felhasználónak az ellenőrzésre: Ha a get-ben entert üt, keletkezik egy akció, ami módot ad a programnak a tartalom ellenőrzésére. Egyébként pontosan ez a Jáva eredeti koncepciója (ahogy magától működik).
Tehát az eredeti kérdésre nincs válasz, alkalmazkodni kell (és érdemes) a terminál adottságaihoz.
- A hozzászóláshoz be kell jelentkezni
Én bizony azt csináltam, gátlástalanul "visszaélve" (vagy inkább "odaélve") a nyílt forráskóddal, hogy csináltam egy másik jwterminal-nak nevezett terminált. Ez pont ennyiben különbözik, hogy actionblock-ot hajt végre, ha egy mező elveszíti a fókuszt, természetesen ez tud galibákat csinálni, és ráadásul ez már régebben is készült, nem emlékszem a pontos részletekre, de ha gondolod, akkor odaadom a forrását, és komparálgasd :)
w
ui: az én jwterminal-om jóval nagyobb, mert belepakoltam egy komplett HTML editort is, az egyik projektbe kellett.
- A hozzászóláshoz be kell jelentkezni
Íme egy megoldás a probléma megkerülésére:
dlg:get_neve:actionblock:={|| if(dlg:get_neve:varget!= x, jtalert("Hiba!",{"OK"},),'' ), dlg:kovetkezo_get_neve:setfocus(.t.)}
Így működik az adatbevitel enter-re és közben adatellenőrzés is történik. Természetesen ettől függetlenül a dialogus befejezésekor is ellenőrizni kell az adatokat mert nem biztos hogy a felhasználó az enter-t használta a továbblépésre
- A hozzászóláshoz be kell jelentkezni
Ha jól értem, ennek az a lényege, hogy enterre menjen tovább a fókusz a következő get-re. Ez működhet, de mégsem írnék ilyet, ui. jobban szeretek alkalmazkodni a Swing eredeti koncepciójához, ami TAB-ra viszi tovább a fókuszt. Az az általános tapasztalat, hogy minél jobban alkalmazkodik egy program a környezethez, annál kevesebb a szívás.
Utána kéne nézni, hogy más GUI programok hogyan viselkednek ebből a szempontból. Az a feltételezésem, hogy a mezőelhagyáshoz kapcsolt ellenőrzés nem tipikus.
Fogom, hogy nehéz a keyboard bal oldalán levő TAB billentyű után kapkodni, de hogy jövünk mi ahhoz, hogy megkérdőjelezzük olyan nagyságok elképzelését, mint B.G. meg a Sun, netán "visszaforgassuk az idő kerekét";)
- A hozzászóláshoz be kell jelentkezni
Egyetértek azzal, hogy ragaszkodjunk a szabványos, tiszta, logikus megoldásokhoz, de azt sem szabad elfelejtünk, hogy ki kell szolgálnunk a felhasználók igényeit, a minél kényelmesebb, kézhezállóbb használatát a szoftvereinknek, hisz ők a megrendelőink, belőlük élünk.
Valahogy a két szempontot kell összhangba hozni ha lehetséges.
- A hozzászóláshoz be kell jelentkezni
Komolyan gondolom, hogy utána kéne nézni, hogy más platformokon és környezetekben mi a helyzet, és mik a mostanra kialakult szokások.
1) A karakteres dialogboxok 20 éve úgy működnek, hogy az Enter továbbviszi a fókuszt, a get elhagyásakor lefut a postblock, az utolsó get után pedig becsukódik a dialogbox.
2) Windózon, húsz éve a TAB viszi tovább a fókuszt, és Enterre azonnal be szokták csukni a dialogboxot.
3) A Jávában szintén a TAB viszi tovább a fókuszt, az Enterre pedig egy "akció" keletkezik, amivel azt csinál a program, amit akar.
Most az a kérdés, hogyha valaki GUI környezetben erőlteti a karakteres konvenciókat, nem tarthatjuk-e azt árral szembeni úszásnak. Vagy fordítva, ha GUI környezetben alkalmazkodom a GUI defaultjaihoz, az igénytelenség és a júzer cserbenhagyása? (Ha nem tesztik a júzernek, forduljon Bill Gateshez.)
A Jáva terminál részben a HTML form+Javascript alternatívája. Szerintem ez a legprimitívebb. Több bankról tudom, hogy olyan "vékony klienst" akar, ami csak browsert és abban Javascriptet futtat.
- A hozzászóláshoz be kell jelentkezni