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.
- Inicie sesión o regístrese para enviar comentarios
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.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);
}
}
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.
Utiliza los actions maps,
Utiliza los actions maps, pero no te salvas de crear un listener:
@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);