Problema com requestFocus()

4 respostas
S

Boa Tarde pessoal,

Estou com o seguinte problema ao construir um JDialog e chamar o requestFocus() num JTextField, a tela é apresentada mais o focus não é setado no campo desejado. Procurei pelo forum e vi um topico antigo onde um usuário disse que existem BUG’s nesse requestFocus() e recomendou por esse código:

addHierarchyListener(new HierarchyListener() { public void hierarchyChanged(HierarchyEvent e) { if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) { SwingUtilities.invokeLater(new Runnable() { public void run() { if (isVisible()) { txtCodigo.requestFocus(); } } }); } } });

Coloquei o código mencionado acima e realmente funcionou, mais não entendo pq o requestFocus() dado normalmente não funciona visando que em outros JDialog da minha aplicação ele funciona normalmente. Também tem um detalhe, o meu controle dos TAB nesse JDialog quando chega num Botão ele não sai mais de la mesmo eu pressionando o TAB novamente, ele praticamente fica travado nesse botão e o unico jeito de manuzear a aplicação fica sendo pelo Mouse. Alguem sabe o que pode ser isso ??

Obrigado

4 Respostas

S

Ninguem pode me dar uma força sobre esse assunto ?

ViniGodoy

Por que você não começa lendo a documentação? Já viu o que o requestFocus diz?
Because the focus behavior of this method is platform-dependent, developers are strongly encouraged to use requestFocusInWindow when possible.

S

Realmente, desculpe a minha ignorancia, não domino a lingua inglesa por isso que não tenho essa habito de verificar na documentação. Já tinha tentando o requestFocusInWindow mais não tinha funcionando também. Deixei com a solução que eu havia comentado no post, só não compreendi o porque disto.
Obrigado

WellingtonRamos

strikezado:
Boa Tarde pessoal,

Estou com o seguinte problema ao construir um JDialog e chamar o requestFocus() num JTextField, a tela é apresentada mais o focus não é setado no campo desejado. Procurei pelo forum e vi um topico antigo onde um usuário disse que existem BUG’s nesse requestFocus() e recomendou por esse código:

addHierarchyListener(new HierarchyListener() { public void hierarchyChanged(HierarchyEvent e) { if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) { SwingUtilities.invokeLater(new Runnable() { public void run() { if (isVisible()) { txtCodigo.requestFocus(); } } }); } } });

Coloquei o código mencionado acima e realmente funcionou, mais não entendo pq o requestFocus() dado normalmente não funciona visando que em outros JDialog da minha aplicação ele funciona normalmente. Também tem um detalhe, o meu controle dos TAB nesse JDialog quando chega num Botão ele não sai mais de la mesmo eu pressionando o TAB novamente, ele praticamente fica travado nesse botão e o unico jeito de manuzear a aplicação fica sendo pelo Mouse. Alguem sabe o que pode ser isso ??

Obrigado


Sobre o requestFocus, o código que você copiou foi desde o addHierarchyListener? Ou foi apenas a parte do SwingUtilities?

Quanto ao controle de foco, teria que ver como você fez o teu “controle dos TABs”. Se digitar Shift-TAB funciona? Ou o foco se perde? Se estiver se perdendo, possivelmente esteja ocorrendo alguma exceção no teu controle fazendo que o foco fique fixo.

Criado 4 de novembro de 2011
Ultima resposta 8 de nov. de 2011
Respostas 4
Participantes 3