KeyListener JPanel, Focus. [RESOLVIDO]

Olá.
Um JPanel quando é adicionado em um JFrame não fica em foco. Portanto se ele implements a interface KeyListener ele não irá responder devido ao foco.
No entanto, pesquisando na API eu olhei os métodos de sua classe ancestral JComponent , grabFocus() usei tb o requestFocus() e o KeyListener continuava não respondendo.
Eu aprendi a resolver este problema usando AbstractAction através de um tutorial do ViniGodoy, mas, agora quero saber porque o componente não fica em foco se eu estou utilizando os métodos que “chamam o focus” para este.

vlw.

Por padrão, os paineis não são “focusables”. Se eu não me engano, nem sequer é capaz de chamar “setFocusable(true)” para eles.

ViniGodoy, fiz o seguinte. tenho um JPanel add em um JFrame e chamei os seguintes métodos (tal como eu disse é o JPanel que implements KeyListener):

        // painel é referencia de JPanel
        painel.setFocusable(true);
        painel.requestFocus();
        painel.grabFocus();

Comecei apertar a tecla do evento e não acontecia nada, No entanto, na ultima tentativa, cliquei na área do painel e ele começou a responder o KeyListener. Será que realmente não tem como settar o focus dele sem ter que fazer este clique? (apenas curiosidade) Porque se eu realmente precisar usar evento em JPanel irei usar AbstractAction.
Se alguém já conseguiu essa proeza faça o favor de relatar aqui.

Vlw.

Só um coisa, só é possível chamar requestFocus() em componentes visíveis. Por isso, não adiantaria colocar esse foco no seu construtor, por exemplo.

E, melhor que chamar o requestFocus() é chamar requestFocusInWindow().

Talvez fazer a chamada de requestFocusInWindow() dentro de um Runnable executado pelo SwingUtilities.invokeLater resolva (talvez…).

[quote=ViniGodoy]Só um coisa, só é possível chamar requestFocus() em componentes visíveis. Por isso, não adiantaria colocar esse foco no seu construtor, por exemplo.

E, melhor que chamar o requestFocus() é chamar requestFocusInWindow().[/quote]

Deu certo, que legal agora não vou precisar usar AbstractAction no futuro projeto que eu vou desenvolver. :smiley:

marcobiscaro2112 e ViniGodoy vlw ae.