Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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ě?

Předmět Autor Datum
Kdy to voláš? Před main.pack() nebo až po? Nebo zkus ještě: SwingUtilities.invokeLater( new Runnab…
MaSo 27.02.2012 19:25
MaSo
Díky za ochotu, ten program je velký... hlavní třída: public class CirSim extends Frame main je defi…
JoDiK 27.02.2012 19:51
JoDiK
Zdrojové kódy originálu jsou tady: src.zip
JoDiK 27.02.2012 19:57
JoDiK
Ok, mrknu na to...:-)
MaSo 27.02.2012 19:59
MaSo
Projevuje se to tak, že když chceš hned po spuštění (nebo po zavření dialogového okna) z klávesnice…
JoDiK 27.02.2012 20:07
JoDiK
MaSo: Asi ses do toho nějak zahrabal, nebo nemáš čas že? Jen se připomínám, případně kdyby někdo jin…
JoDiK 29.02.2012 11:12
JoDiK
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...:-(…
MaSo 29.02.2012 11:51
MaSo
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é…
JoDiK 29.02.2012 12:12
JoDiK
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/jav… poslední
MaSo 29.02.2012 12:27
MaSo

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:

Dimension screen = getToolkit().getScreenSize();
resize(860, 640);
handleResize();
Dimension x = getSize();
setLocation((screen.width - x.width)/2,
(screen.height - x.height)/2);
show();
main.requestFocus();

Na konci zpracování dialogového okna
je tento kód:

apply();
cframe.main.requestFocus();
setVisible(false);
cframe.editDialog = null;

kde cframe je druhý parametr předávaný při aktivaci z hlavní aplikace takto:
editDialog = new EditDialog(eable, this);

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...:-)

Zpět do poradny Odpovědět na původní otázku Nahoru