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.
JTextField
a été conçu pour utiliser un ActionListener
comme un JButton
est. Voir la méthode addActionListener()
de JTextField
name__.
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 Action
name__, qui implémente ActionListener
car Action
est une nouvelle API avec des fonctionnalités supplémentaires. Par exemple, vous pouvez désactiver le Action
name__, ce qui désactiverait l'événement pour le champ de texte et le bouton.
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!
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.
}
}
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();
}
}
});
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!
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
}
}
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).