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:
[code]// que muda o foco com TAB
public void keyPressed (KeyEvent e){
if (e.getKeyCode() == 10){
e.setKeyCode(KeyEvent.VK_TAB);
}
}
[/code]
Achei a solução para o ENTER. Como adapto esta ? Na ação para textField_1 ?
// enter para pular de campo
HashSet conj = new HashSet(frame.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));
frame.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj);
import java.awt.AWTKeyStroke;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import javax.swing.JPanel;
public class PassaCamposComEnter {
public void passaCamposComEnter(JPanel painel){
// Colocando enter para pular de campo
HashSet conj = new HashSet(painel.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));
painel.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj);
}
}
//pra invocar
new PassaCamposComEnter(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.
/* 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 Assis
float Mass_a, Altur_a, Resultad_o;
private final JPanel Obter_dados = new JPanel();
private final JPanel Exibir_Resultado = new JPanel();
private JLabel Exibi_IMC = new JLabel();
private JLabel EXibi_Status = new JLabel();
// Espera-se que a massa esteja em quilogramas e a altura em metros.
private final JLabel Massa = new JLabel("Massa (Kg): ");
private final JLabel Altura = new JLabel(" Altura (m): ");
private JTextField M_assa;
private JTextField A_ltura;
private final JButton Calcular = new JButton("Calcular");
private final JButton Limpar = new JButton("Limpar");
public IMC(){
this.A_ltura = new JTextField(9);
this.M_assa = new JTextField(9);
// Definindo a fonte dos JLabel's
Massa.setFont(new Font("Tahoma", Font.BOLD, 14));
Altura.setFont(new Font("Tahoma", Font.BOLD, 14));
// Adicionando os componentes
Obter_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 JLabel
Obter_dados.setBorder(BorderFactory.createTitledBorder("IMC"));
// Dimensão do JPanel 210 de comprimento por 150 de largura
Obter_dados.setPreferredSize(new Dimension(210,150));
Exibir_Resultado.add(EXibi_Status);
add(Exibir_Resultado);
Exibir_Resultado.setBorder(BorderFactory.createTitledBorder("Resultado"));
Exibir_Resultado.setPreferredSize(new Dimension(210,90));
Calcular.addActionListener((ActionEvent event) -> {
// Obtendo a massa e a altura e convertendo de String para float
Mass_a = Float.valueOf(M_assa.getText());
Altur_a = Float.valueOf(A_ltura.getText());
// Calculo de IMC: massa dividida pelo quadrado da altura
Resultad_o = Mass_a / (Altur_a * Altur_a);
EXibi_Status.setText(Verifica(Resultad_o));
Exibi_IMC.setText(String.valueOf(Resultad_o));
});
Limpar.addActionListener((ActionEvent event) -> {
// Apagando os conteúdos os JTextField's'
M_assa.setText("");
A_ltura.setText("");
Exibi_IMC.setText("");
});
}
public static void considerarEnterComoTab (Component comp) {
Set<AWTKeyStroke> keystrokes = comp.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
Set<AWTKeyStroke> newKeystrokes = new HashSet<AWTKeyStroke> (keystrokes);
newKeystrokes.add (AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));
comp.setFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, newKeystrokes);
}
public String Verifica (float Resultad_o){
String resultado = null;
// Verificando a situação do indivíduo
if (Resultad_o<18.5)
resultado="Baixo peso";
else if (Resultad_o>=18.5 && Resultad_o<24.9)
resultado="Normal";
else if (Resultad_o>=25.0 && Resultad_o<=29.9)
resultado="Pre-obeso";
else if (Resultad_o>=30.0 && Resultad_o<=34.9)
resultado="Obesidade classe I (leve)";
else if (Resultad_o>=35.0 && Resultad_o<39.9)
resultado="Obesidade classe II (moderada)";
else if (Resultad_o>=40.0)
resultado="Obesidade classe III (grave,morbida)";
// Retorna a variável resultado no modo String
return resultado;
}
public static void main(String[] args){
JFrame Janela = new JFrame();
IMC imc = new IMC();
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);
}
}
[/quote]
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
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.