2011-01-26 5 views
10

Comment puis-je faire en sorte que lorsque j'appuie sur entrer dans un JTextField, il active un JButton spécifique? Ce que je veux dire est quelque chose dans le sens d'un formulaire de page Web où vous pouvez appuyer sur Entrée pour activer le bouton dans le formulaire. Merci.Java mettre l'accent sur jbutton en appuyant sur entrer

Répondre

13

Vous devez utiliser un Action pour le JButton:

Action sendAction = new AbstractAction("Send") { 
    public void actionPerformed(ActionEvent e) { 
     // do something 
    } 
}; 

JButton button = new JButton(sendAction); 

Ensuite, vous pouvez définir la même action pour un JTextField ou même sur un MenuItem si vous voulez la même action soit disponible dans le menu:

JTextField textField = new JTextField(); 
textField.setAction(sendAction); 
+5

+1, cool, je ne savais même pas sur la méthode setAction(). J'ai toujours utilisé addActionListener. De toute façon c'est la meilleure solution. – camickr

7

Quelque chose comme cela devrait fonctionner:

textField.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     button.requestFocusInWindow(); 
    } 
}); 
+0

Je viens essayé et ça met la se concentrer sur le bouton, mais il ne l'active pas. – LOD121

+0

Il ne sera pas, la méthode requestFocusInWindow() fait ce qu'il dit sur l'étain. Pour simuler un clic, la méthode doClick() est ce que vous recherchez. – berry120

+2

button.doClick(); fonctionne bien. Merci. – LOD121

3

je ferais quelque chose comme ce qui suit:

textField.addKeyListener(
    new KeyAdapter() { 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_ENTER) { 
      button.doClick(); 
     } 
    } 
    }); 
} 
+1

Merci. Cela fonctionne bien. – LOD121

+1

@ LOD121, Oui cela fonctionne, mais ce n'est pas la façon dont le champ de texte a été conçu pour être utilisé. – camickr

+0

Je suis d'accord et avoue que je ne connaissais pas non plus la méthode setAction()! Nous apprenons quelque chose tous les jours hein? – berry120

4

Vous pouvez y parvenir en ajoutant le comportement default au bouton, comme celui-ci

cmdLogin.setDefaultCapable(true); // by default, this is true 
this.getRootPane().setDefaultButton(cmdLogin); // here `this` is your parent container 
+1

+1, mais attention: cela ne fonctionnera que tant que textField n'aura pas une Action attachée. – kleopatra

+0

yup. c'est vrai. mais dans ce cas, cela devrait fonctionner et j'espère que le but de l'auteur du post était d'obtenir le comportement par défaut. – sunil

Questions connexes