web-dev-qa-db-fra.com

Detect enter presse dans JTextField

Est-il possible de détecter quand quelqu'un appuie sur Enter en tapant un JTextField en Java? Sans avoir à créer un bouton et le définir comme valeur par défaut.

96
a sandwhich

JTextFielda été conçu pour utiliser un ActionListenercomme un JButtonest. Voir la méthode addActionListener() de JTextFieldname__.

Par exemple:

Action action = new AbstractAction()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("some action");
    }
};

JTextField textField = new JTextField(10);
textField.addActionListener( action );

Maintenant, l'événement est déclenché lorsque le Enter la clé est utilisée.

En outre, un avantage supplémentaire est que vous pouvez partager l'auditeur avec un bouton même si vous ne souhaitez pas que le bouton devienne un bouton par défaut.

JButton button = new JButton("Do Something");
button.addActionListener( action );

Notez que cet exemple utilise un Actionname__, qui implémente ActionListenercar Actionest une nouvelle API avec des fonctionnalités supplémentaires. Par exemple, vous pouvez désactiver le Actionname__, ce qui désactiverait l'événement pour le champ de texte et le bouton.

159
camickr
JTextField function=new JTextField(8);   
function.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e){

                        //statements!!!

                }});

tout ce que vous avez à faire est d’ajouter ActionListener à JTextField comme ci-dessus! Après avoir appuyé sur Enter l'action sera effectuée ce que vous voulez à la déclaration!

21
kyorilys

Ajouter un événement pour KeyPressed.

private void jTextField1KeyPressed(Java.awt.event.KeyEvent evt) {
  if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
      // Enter was pressed. Your code goes here.
   }
} 
12
Ionică Bizău

Voulez-vous faire quelque chose comme ça? 

JTextField mTextField = new JTextField();
    mTextField.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                // something like...
               //mTextField.getText();
               // or...
               //mButton.doClick();
            }
        }

    });
5

Les autres réponses (y compris celles acceptées) sont bonnes, mais si vous utilisez déjà Java8, vous pouvez procéder comme suit (de manière plus récente et plus courte):

textField.addActionListener(
    ae -> {
        //dostuff
    }
);

Comme le dit la réponse acceptée, vous pouvez simplement réagir avec une ActionListener, qui intercepte la touche Entrée.

Cependant, mon approche tire parti des concepts fonctionnels introduits dans Java 8.

Si vous souhaitez utiliser la même action par exemple pour un bouton et le JTextField, vous pouvez effectuer les opérations suivantes:

ActionListener l = ae -> {
    //do stuff
}

button.addActionListener(l);
textField.addActionListener(l);

Si des explications supplémentaires sont nécessaires, s'il vous plaît faites le moi savoir!

1
Thomas Böhm

Ajoutez d’abord la commande d’action sur JButton ou JTextField en:

JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");

Ajoutez ensuite ActionListener à JTextField et à JButton.

JButton.addActionListener(listener);
JTextField.addActionListener(listener);

Après cela, sur votre implémentation ActionListener, écrivez

@Override
public void actionPerformed(ActionEvent e)
{
    String actionCommand = e.getActionCommand();

    if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your   actionCommand for press Enter"))
    {
        //Do something
    }
}
1
greg

Si vous souhaitez définir une action de bouton par défaut dans une entrée JTextField, vous devez procéder comme suit:

//put this after initComponents();

textField.addActionListener(button.getActionListeners()[0]);

C'est [0] car un bouton peut avoir beaucoup d'actions, mais n'en a normalement qu'une (ActionPerformed).

0
JACA