JTextField - Enter - próximo foco

Olá comunidade,

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);

De código escrito tenho isso:

private void textField_1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
       

}     

private java.awt.TextField textField2; 

Agradeço a todos.

1 curtida

Ola !!!

Tente assim:


seuJTextField.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {

           seuJtextField.transferFocus();

       }

});

[edit]

Caso o que vc queira seja transferir o foco para outro JTexField de sua escolha faça assim:


seuJTextField.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {

           seuOutroJtextField.requestFocus();

       }

});

Caso não der certo posta ai o codigo de erro.

use esta classe.

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.

t+ e boa sorte

Não use listeners para controlar foco. Siga a dica do fernandopaiva.

Veja esse post do Thingol que explica como usar esse recurso:
http://www.guj.com.br/java/92862-tecla-enter-no-jtextfield-#497162

ViniGodoy ,

Valeu pela dica

Estarei dando uma olhada.

:thumbup:

[quote]/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    /
    package imc;
    /
  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */

/**
*

  • @author ITAUTECi3
    */
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    import javax.swing.JButton;
    import java.awt.AWTKeyStroke;
    import java.awt.Component;
    import java.awt.KeyboardFocusManager;
    import java.awt.event.KeyEvent;
    import java.util.HashSet;
    import java.util.Set;
    import javax.swing.JPanel;

/* 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 :slight_smile:

Cara, o link tá off.

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.

Nesse caso talvez o ideal seja usar a classe InputVerifier.

1 curtida

No evento KeyPressed coloca:

if(VK_RETURN == 1) {
this.transferFocus();
}