Est-il possible de détecter quand quelqu'un appuie sur Enteren tapant un JTextField en java? Sans avoir à créer un bouton et à le définir par défaut.
Est-il possible de détecter quand quelqu'un appuie sur Enteren tapant un JTextField en java? Sans avoir à créer un bouton et à le définir par défaut.
Réponses:
A a JTextField
été conçu pour utiliser un ActionListener
comme un JButton
est. Voir la addActionListener()
méthode de JTextField
.
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 la Enterclé 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 en faire un bouton par défaut.
JButton button = new JButton("Do Something");
button.addActionListener( action );
Notez que cet exemple utilise un Action
, qui implémente ActionListener
car Action
est une API plus récente avec des fonctionnalités supplémentaires. Par exemple, vous pouvez désactiver le Action
qui désactiverait l'événement à la fois 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'ajouterActionListener au JTextField comme ci-dessus! Après avoir appuyé sur, Enterl'action exécutera ce que vous voulez à l'instruction!
Ajoutez 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.
}
}
KeyListeners
présentent de nombreuses lacunes, qui sont dans une plus grande mesure comblées KeyBindings
, telles que la mise au point, le copier / coller et bien d'autres. Il est à éviter, pour des tâches triviales, telles que, comme demandé dans OP.
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();
}
}
});
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
}
}
Les autres réponses (y compris celles acceptées) sont bonnes, mais si vous utilisez déjà Java8, vous pouvez faire ce qui suit (d'une manière plus courte et plus récente):
textField.addActionListener(
ae -> {
//dostuff
}
);
Comme le dit la réponse acceptée, vous pouvez simplement réagir avec un ActionListener
, qui attrape la touche Entrée.
Cependant, mon approche tire parti des concepts fonctionnels qui ont été 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, veuillez me le faire savoir!
Si vous souhaitez définir une action de bouton par défaut dans une entrée JTextField, vous devez le faire:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
C'est [0] parce qu'un bouton peut avoir beaucoup d'actions, mais n'en a normalement qu'une (ActionPerformed).
Pour chaque champ de texte de votre cadre, appelez la méthode addKeyListener. Ensuite, implémentez et remplacez la méthode keyPressed, comme d'autres l'ont indiqué. Vous pouvez maintenant appuyer sur Entrée à partir de n'importe quel champ de votre cadre pour activer votre action.
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
public void keyReleased(KeyEvent e)
{
int key=e.getKeyCode();
if(e.getSource()==textField)
{
if(key==KeyEvent.VK_ENTER)
{
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
}
}
Pour écrire une logique pour «Enter press» JTextField
, il est préférable de conserver la logique à l'intérieur du keyReleased()
bloc au lieu de keyTyped()
& keyPressed()
.
KeyListeners
Sont bien trop bas du Swing
point de vue de. Utilisez l'API qui est censée être utilisé avec Swing
:-)
Utilisez simplement ce code:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);