Ajuda com foco em componentes swing

3 respostas
samirrolemberg

Olá pessoal, estou desenvolvendo uma aplicação e estou com dificuldades em setar o foco em determinado componente.

A situação é a seguinte:

no JFrame exibido ela carrega o JTabbedPane, com 3 JPanes associados aonde eu contruo o formulário.

Neste formulário, o primeiro componente o JTextField não ganha foco, e não é editavel, nem selecionavel.

O Segundo o que realmente precisa ganhar foco, o JFomattedTextField, necessita que o cursor vá para ele.

Antes, de iniciar o processo do uso do JTabbedPane, o metodo funcionava normalmente.

que era fazer o primeiro componente ter os metodos setEditable e setFocusable como false.

então ao iniciar o Frame, o cursor apontava para o componente seguinte.

Mas, quando passei a usar o JTabbedPane, a aba inicial, passou a ganhar foco.

Então, só consegui resolver o caso setando o JTabbedPane como false.

mas, percebi que não poderia fazer isso, já que as outras abas são importantes tambem e o usuário pode querer trocar de aba com as setas do teclado.

alguem tem alguma sugestão?

3 Respostas

manolimars

tente setar o foco no seu componente

seuJFomattedTextField.grabFocus();
ViniGodoy

O método para se obter foco num componente é o requestFocusInWindow(), não o grabFocus(). Veja o que diz o javadoc do GrabFocus:

Ainda assim, é necessário selecionar explicitamente o segundo tab, antes de requisitar foco sobre ele:

E só então chamar o requestFocusInWindow(). Você pode fazer isso antes de dar setVisible(true) na sua tela, após ter criado todos os componentes. Em todo caso, se seu comportamento de foco precisar ficar ainda mais complexo é melhor estudar o subsistema de foco:
http://download.oracle.com/javase/tutorial/uiswing/misc/focus.html
http://download.oracle.com/javase/tutorial/uiswing/events/focuslistener.html

samirrolemberg

//Make textField get the focus whenever frame is activated. frame.addWindowFocusListener(new WindowAdapter() { public void windowGainedFocus(WindowEvent e) { textField.requestFocusInWindow(); } });

funcionou com este codigo. do primeiro link do godoy.

thanks man!

Criado 9 de agosto de 2010
Ultima resposta 10 de ago. de 2010
Respostas 3
Participantes 3