style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Funcionamiento del un botón ENTER igual que CLICK

Buenas tardes.

Me gustaría saber si en Java se puede hacer que al pulsar INTRO sobre un botón se ejecute como si fuera un click. Me refiero a algo sencillo y no tener que añadir un "actionPerformed" y un "keyPressed" en cada botón que tenga para que se ejecute lo mismo.

Ahora mimo lo tengo como os he dicho anteriormente y se llama a un método, pero es un poco molesto tener que añadir dos eventos a cada botón, ya que si se te olvida alguno no funciona correctamente.

Un saludo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de JDaniel10

hola

mm creo que no hay necesidad de poner los dos eventos,..

Y como se haría entonces,

Y como se haría entonces, porque si no pongo los dos eventos, con la tecla INTRO no funciona el click.

Un saludo.

Puedes crear un listener que

Puedes crear un listener que implemente `ActionListener` y `KeyListener` que reciba la funcionalidad a ejecutar y además un método donde registras los listener al botón para que no se te olvide

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

interface ClickEnterListener extends ActionListener, KeyListener {
     
     default public void actionPerformed( ActionEvent e ) {
         System.out.println("ap");
     }
     default public void keyPressed( KeyEvent ke ) {        
         if (ke.getKeyCode() == KeyEvent.VK_ENTER) {            
             realAction();
         }
      }
     default public void keyReleased( KeyEvent ke ) {}
     default public void keyTyped( KeyEvent ke ) {}

     void realAction();
}    
 
class Ejemplo {
 
   public static void main( String ... args ) {  
       JFrame f = new JFrame();
       JButton abrir  = new JButton("a") ;
       JButton cerrar = new JButton("b");
       JPanel p = new JPanel();
       p.add(abrir );
       p.add(cerrar);
       f.add(p);
       f.pack();
       f.setVisible(true);
       
       registra( abrir, () -> System.out.println("Abriendo"));    
       registra( cerrar, () -> System.out.println("Cerrando"));
    }

   public static void registra( JButton b, ClickEnterListener cel ) {
        b.addActionListener(cel);
        // por default la tecla espacio esta registrada como action
        // listener, con esto se desasocia
        b.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0),"" );
        b.addKeyListener(cel);
    }
}

swing example

Links consultados:

http://stackoverflow.com/a/10712202/20654
http://stackoverflow.com/a/12136312/20654
https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html
https://dzone.com/articles/introduction-functional-1

¿ENTER?

¿Así es como funciona en Windows Forms?

El botón que debería responder a esa tecla debería ser el botón por defecto del formulario.

Imagen de Nopalin

Utiliza los actions maps,

Utiliza los actions maps, pero no te salvas de crear un listener:

ActionListener al = new ActionListener(){
            @Override public void actionPerformed(ActionEvent ae){
        ((JButton)ae.getSource()).doClick();
    }
};
KeyStroke enterKey = KeyStroke.getKeyStroke("pressed ENTER");
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(enterKey, "aceptar");
button.getActionMap().put("aceptar", acceptAction);

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">