GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como mudar o foco da JTextField para outro JTextFiedl?

Saudações Gujianas. Tudo bem com o vocês?

Eu andei procurando por ai, mas nada que pudesse me ajudar, inclusive aqui mesmo no fórum. Eu quero “manipular” para onde meu tab vai. Para exemplificar melhor para vocês. Segue imagem abaixo.

Como podem ver, meu cursor esta piscando no JTextFiedl Nome da Empresa. Quando eu apertar Tab, quero que ele vá para a linha de baixo. Ou seja, JText Fiedl AnyDesk, TeamViewer, Telefone, Celular e por fim o JTextArea Observação.

No entanto, quando eu aperto o Tab ele pula para o JTextArea Observação.

E se você apertar novamente Tab ele fica ali dentro do JTextArea e não sai mais.

Eu quero que ele pule para o JButton Incluir . Segue o código.

@SuppressWarnings("unchecked")
public void PassarFoco(JPanel jpanelPrincipal) {

	@SuppressWarnings("rawtypes")
	HashSet conj = new HashSet(jpanelPrincipal.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
	
	conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 0));
	
	jtfNomeEmpresa.requestFocus();
	jtfAnyDesk.requestFocus();
	jtfTeamViewer.requestFocus();
	jtfTelefone.requestFocus();
	jtfCelular.requestFocus();
	jtfObservacao.requestFocus();
	
	jpanelPrincipal.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj);

	
}

Bela pesquisa que deve ter feito, hein?
Uma simples busca no gugol e tcharam…

Cara, eu olhei este site mas não entendi.

Eu to procurando aqui uma forma de quando apertar Tab não entre no TextArea e sim pule de campo. Pois para sair deste campo tem que apertar Ctrl + Tab. Ou melhor ainda, uma forma de manipular para quando o usuário digitar somente O nome da empresa e Anydesk ao apertar Enter ele já inclui isto na lista.

Melhor que pesquisar no Google seria bom adquirir o costume de consultar a documentação - Docs Oracle. Eu uso o método requestFocusInWindow() da classe JComponent da qual todo componente swing herda (se não me engano). Se tiver usando uma IDE, tem a opção de marcar a ordem dos componentes na recepção do foco. No NetBeans, faça:

1 - Clique com o botão direito no componente;
2 - Clique em propriedades
3 - Na parte Outras Propriedades, encontre a opção: nextFocusableComponent;
4 - Expanda a caixa de seleção (clique na flecha) e escolha o próximo componente que irá receber o foco.

A troca de componente sob foco funciona com só com a tecla tab, se não me engano.

Para o caso de pressionar Enter, tu pode usar o método keyPressed e verificar se foi a tecla Enter a pressionada. Exemplo:

private void txt1KeyPressed(java.awt.event.KeyEvent evt){                                         
	if(evt.getKeyCode() == KeyEvent.VK_ENTER)
		txt2.requestFocusInWindow();
}

Certo, no caso eu uso o Eclipse, tem algum dica assim também como tem para o NetBeans?

Bah, … faz tempo de não uso o eclipse (acho muito pesado = minha opinião, aqui no meu pecesinho…). Dá para fazer na unha também.

Beleza. Vou ver aqui. Eu estava vendo a primeira solução que o Darlan passou não me atende. Terei que mudar muita coisa do meu sistema. Parece que sua sugestão é mais cabível.

Obrigado.

Ah muleke, eu consegui aqui. Eu tava procurando e achei um cara querendo desfazer o foco. Ai olhei o código e pensei “hum interessante”. Aí só implementei isso.

public void PassarFocoKeyReleased() {

	jtfObservacao.addKeyListener(new KeyListener() {

		@Override
		public void keyTyped(KeyEvent e) {

		}

		@Override
		public void keyReleased(KeyEvent e) {

		}

		@SuppressWarnings("static-access")
		@Override
		public void keyPressed(KeyEvent e) {

			if (e.getKeyCode() == e.VK_TAB) {
				jtfAnyDesk.requestFocus();

			}

		}
	});


}

E tharam… Valeu ai pela dica aí Iohannes

Só para quem não entendeu jtfObservacao é meu JTextArea e eu queria que ele passasse para o próximo campo que é JTextField. Então eis o código acima.

Para que implementar métodos que não vais usar? Existe a classe KeyAdapter (Docs Oracle - KeyAdapter Class) que permite usar apenas o método que tu precisar, sem a necessidade de implementar os outros.

Fonte: Java Como Programar 8 - Cap. 14, pág. 452 - 455.

Sim sim. Estou implementando neste momento com KeyAdapter. Obrigado.

//