Tenho um probleminha,
Como faço para que um JTextField ao receber os dados e pressionado ENTER aponte o foco para o próximo JTextField logo abaixo ?
Achei isso em um forum:
// que muda o foco com TABpublicvoidkeyPressed(KeyEvente){if(e.getKeyCode()==10){e.setKeyCode(KeyEvent.VK_TAB);}}
Achei a solução para o ENTER. Como adapto esta ? Na ação para textField_1 ?
// enter para pular de campo HashSetconj=newHashSet(frame.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER,0));frame.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,conj);
importjava.awt.AWTKeyStroke;importjava.awt.KeyboardFocusManager;importjava.awt.event.KeyEvent;importjava.util.HashSet;importjavax.swing.JPanel;publicclassPassaCamposComEnter{publicvoidpassaCamposComEnter(JPanelpainel){// Colocando enter para pular de campoHashSetconj=newHashSet(painel.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER,0));painel.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,conj);}}//pra invocarnewPassaCamposComEnter(panelCampos);
Assim vc apenas passa um JPanel onde estao os campos…Para requisitar o foco em um campo use jtextfield.requestFocus(); caso seje necessario, porem essa classe ja faz isso pra vc.
t+ e boa sorte
V
ViniGodoy
Não use listeners para controlar foco. Siga a dica do fernandopaiva.
/* O Índice de Massa Corporal representada pela sigla IMC
é a medida do grau de obesidade de uma pessoa, considerando
a altura e a massa de uma pessoa.*/
public final class IMC extends JPanel{
// Autor: João Matheus Santos AssisfloatMass_a,Altur_a,Resultad_o;privatefinalJPanelObter_dados=newJPanel();privatefinalJPanelExibir_Resultado=newJPanel();privateJLabelExibi_IMC=newJLabel();privateJLabelEXibi_Status=newJLabel();// Espera-se que a massa esteja em quilogramas e a altura em metros.privatefinalJLabelMassa=newJLabel("Massa (Kg): ");privatefinalJLabelAltura=newJLabel(" Altura (m): ");privateJTextFieldM_assa;privateJTextFieldA_ltura;privatefinalJButtonCalcular=newJButton("Calcular");privatefinalJButtonLimpar=newJButton("Limpar");publicIMC(){this.A_ltura=newJTextField(9);this.M_assa=newJTextField(9);// Definindo a fonte dos JLabel'sMassa.setFont(newFont("Tahoma",Font.BOLD,14));Altura.setFont(newFont("Tahoma",Font.BOLD,14));// Adicionando os componentesObter_dados.add(Massa);Obter_dados.add(M_assa);Obter_dados.add(Altura);Obter_dados.add(A_ltura);Obter_dados.add(Calcular);Obter_dados.add(Limpar);Obter_dados.add(Exibi_IMC);add(Obter_dados);// Adicionando título ao JLabelObter_dados.setBorder(BorderFactory.createTitledBorder("IMC"));// Dimensão do JPanel 210 de comprimento por 150 de larguraObter_dados.setPreferredSize(newDimension(210,150));Exibir_Resultado.add(EXibi_Status);add(Exibir_Resultado);Exibir_Resultado.setBorder(BorderFactory.createTitledBorder("Resultado"));Exibir_Resultado.setPreferredSize(newDimension(210,90));Calcular.addActionListener((ActionEventevent)->{// Obtendo a massa e a altura e convertendo de String para floatMass_a=Float.valueOf(M_assa.getText());Altur_a=Float.valueOf(A_ltura.getText());// Calculo de IMC: massa dividida pelo quadrado da alturaResultad_o=Mass_a/(Altur_a*Altur_a);EXibi_Status.setText(Verifica(Resultad_o));Exibi_IMC.setText(String.valueOf(Resultad_o));});Limpar.addActionListener((ActionEventevent)->{// Apagando os conteúdos os JTextField's'M_assa.setText("");A_ltura.setText("");Exibi_IMC.setText("");});}publicstaticvoidconsiderarEnterComoTab(Componentcomp){Set<AWTKeyStroke>keystrokes=comp.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);Set<AWTKeyStroke>newKeystrokes=newHashSet<AWTKeyStroke>(keystrokes);newKeystrokes.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER,0));comp.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,newKeystrokes);
}
publicStringVerifica(floatResultad_o){Stringresultado=null;// Verificando a situação do indivíduoif(Resultad_o<18.5)resultado="Baixo peso";elseif(Resultad_o>=18.5&&Resultad_o<24.9)resultado="Normal";elseif(Resultad_o>=25.0&&Resultad_o<=29.9)resultado="Pre-obeso";elseif(Resultad_o>=30.0&&Resultad_o<=34.9)resultado="Obesidade classe I (leve)";elseif(Resultad_o>=35.0&&Resultad_o<39.9)resultado="Obesidade classe II (moderada)";elseif(Resultad_o>=40.0)resultado="Obesidade classe III (grave,morbida)";// Retorna a variável resultado no modo Stringreturnresultado;}publicstaticvoidmain(String[]args){JFrameJanela=newJFrame();IMCimc=newIMC();Janela.add(imc);Janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Janela.setTitle("Calculando o IMC");Janela.setSize(240,300);Janela.setVisible(true);Janela.setResizable(false);Janela.setLocationRelativeTo(null);}
}
Nesse caso o código já está pronto. Queria implementar a função do Enter sem necessitar apagar ou reescrever o código.
É possível apenas com a implementação de alguma classe?
Obrigado
R
ricSotnas
Cara, o link tá off.
E
ErielMiquilino
Olá…
Boa tarde Vini
Estou em duvida entre usar KeyPressed e este método apresentado pelo Thingol
Pois na minha situação alem de transferir o foco o enter também irá validar se o valor informado no componente esta correto.
Qual a diferença entre os dois?
Desde de já, eu agradeço a atenção, Obrigado.
V
ViniGodoy1 like
Nesse caso talvez o ideal seja usar a classe InputVerifier.