2011-01-26 65 views
10

¿Cómo puedo hacerlo para que cuando presione enter en un JTextField active un JButton específico? Lo que quiero decir es algo similar a un formulario de página web donde puede presionar enter para activar el botón en el formulario. Gracias.Java establece el foco en jbutton al presionar enter

Respuesta

13

debe utilizar un Action para la JButton:

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

JButton button = new JButton(sendAction); 

Entonces puede establecer la misma acción para un JTextField o incluso en un MenuItem si desea que la misma acción que esté disponible en el Menú:

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

+1, genial, ni siquiera sabía sobre el método setAction(). Siempre he usado addActionListener. De cualquier forma, esta es la mejor solución. – camickr

7

Algo como esto debería funcionar:

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

he intentado eso y pone el centrarse en el botón, pero no lo activa. – LOD121

+0

No lo hará, el método requestFocusInWindow() hace lo que dice en la lata. Para simular un clic, el método doClick() es lo que buscas. – berry120

+2

button.doClick(); funciona bien. Gracias. – LOD121

3

me gustaría hacer algo como lo siguiente:

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

Gracias. Esto funciona bien – LOD121

+1

@ LOD121, Sí, funciona, pero esta no es la forma en que el campo de texto fue diseñado para ser utilizado. – camickr

+0

¡Tengo que aceptar y admitir que yo tampoco estaba al tanto del método setAction()! Aprendemos algo todos los días ¿eh? – berry120

4

se puede lograr esto mediante la adición de la conducta default al botón, como este

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

+1, pero ten cuidado: eso solo funcionará mientras el campo de texto _no tenga una Acción adjunta. – kleopatra

+0

yup. eso es verdad. pero en este caso, esto debería funcionar y espero que el objetivo del post author sea obtener el comportamiento 'default'. – sunil

Cuestiones relacionadas