Java: Problém s Focusem a vyhodnocením znaků z klávesnice
Javu moc neumím, jen upravuju program, kde jsem narazil na jednu nepříjemnost. Z nějakého důvodu tam nefunguje čtení z klávesnice, dokud se na okno neklikne. Vydedukoval jsem, že za to může to, že po zavolání
main.requestFocus();
mi kontrolní výpis:
System.out.println(main.hasFocus));
píše false. Nebo-li focus asi nebyl přidělen. Dá se s tím něco dělat?
Ten stav nastane hned po spuštění aplikace, nebo po uzavření dialogového okna, kdy by se Focus měl vrátit na hlavní okno, ale dokud se na něj neklikne myší, znaky z klávesnice to nepřebírá...
Našel jsem jen jak něco takového využít na "zákaz klávesnice a myši" http://www.java-tips.org/java-se-tips/javax.swing/ how-to-block-mouse-and-key-events-in-an-applic.htm l , ale jak to povolit, se mi vygooglovat nedaří.
Nevíte někdo, co je špatně?
Kdy to voláš? Před main.pack() nebo až po?
Nebo zkus ještě:
main je co? Instance JFrame?
Nebo sem vlož ten program, mrknu na to...
Díky za ochotu, ten program je velký...
hlavní třída: public class CirSim extends Frame
main je definováno takto:
static Container main;
a přiřazeno:
main = this;
a na konci zřejmě konstruktoru public void init() je tento kód:
Na konci zpracování dialogového okna
je tento kód:
kde cframe je druhý parametr předávaný při aktivaci z hlavní aplikace takto:
editDialog = new EditDialog(eable, this);
Zdrojové kódy originálu jsou tady: src.zip
Ok, mrknu na to...
Projevuje se to tak, že když chceš hned po spuštění (nebo po zavření dialogového okna) z klávesnice zvolit součástku (r,l,c,g,w) tak to nereaguje. Začne to reagovat až po kliknutí na okno.
MaSo: Asi ses do toho nějak zahrabal, nebo nemáš čas že?
Jen se připomínám, případně kdyby někdo jiný věděl co s tím...
Koukal jsem na to, ale nedaří se. Je to psané ještě ve starém AWT a s tím nemám moc zkušenosti... Navíc, ten program je napsaný hodně prasáckým způsobem (hlavní třída má 3000 řádků a implementuje 7 rozhraní ), spousty neošetřených Exceptions - až se divím, že to je vůbec použitelné). Ale neklesej na mysli, ještě na to dneska mrknu...
No taky mi z toho jde hlava kolem, já ten program překládám do češtiny a dolaďuju některé nešikovné postupy a nedodělky. Autor už na tom zřejmě dál nepokračuje, protože přešel na platformu iPod.
Obávám se, že s tím focusem v AWT bude problém viz. http://docs.oracle.com/javase/1.4.2/docs/api/java/ awt/doc-files/FocusSpec.html
pasáž (Requesting Focus), ale napadl mně jeden malý workaround - večer to vyzkouším, pak dám vědět.