2010-12-11 15 views

Respuesta

147

A JTextField fue diseñado para usar un ActionListener como un JButton es. Consulte el método addActionListener() de JTextField.

Por ejemplo:

Action action = new AbstractAction() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println("some action"); 
    } 
}; 

JTextField textField = new JTextField(10); 
textField.addActionListener(action); 

Ahora el evento se activa cuando el Enter se utiliza clave.

Además, un beneficio adicional es que se puede compartir al oyente con un botón, incluso si usted no desea que el botón de un botón predeterminado.

JButton button = new JButton("Do Something"); 
button.addActionListener(action); 

Nota, este ejemplo utiliza un Action, que implementa ActionListener porque Action es una API más reciente con características de suma. Por ejemplo, puede deshabilitar el Action que deshabilitaría el evento tanto para el campo de texto como para el botón.

+1

De acuerdo. Solución más elegante que la mía, en el caso general. – Kos

+0

@camickr es un experto de Java oscilaciones –

20
JTextField function=new JTextField(8); 
function.addActionListener(new ActionListener(){ 

       public void actionPerformed(ActionEvent e){ 

         //statements!!! 

       }}); 

¡todo lo que necesitas hacer es addActionListener to the JTextField como arriba! Después de presionar Ingrese, la acción realizará lo que quiera en la declaración.

+0

Bonificación para el bloque en línea. Mantiene el código limpio. –

10

Añadir un evento para KeyPressed.

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) { 
    if(evt.getKeyCode() == KeyEvent.VK_ENTER) { 
     // Enter was pressed. Your code goes here. 
    } 
} 
+5

-1, use la API de la manera en que fue diseñada para ser utilizada. – camickr

+0

-1 :(Los KeyListeners están en un nivel demasiado bajo desde la perspectiva de Swing. Use la API que está destinada a ser utilizada con Swing :-) –

+0

Por alguna razón, esta publicación es la más positiva votada por usuarios anónimos. :-) Sí, esta fue mi solución que encontré. Gracias por los comentarios! –

-2
public void keyReleased(KeyEvent e) 
{ 
    int key=e.getKeyCode(); 
    if(e.getSource()==textField) 
    { 
     if(key==KeyEvent.VK_ENTER) 
     { 
      Toolkit.getDefaultToolkit().beep(); 
      textField_1.requestFocusInWindow();      
     } 
    } 

Para escribir la lógica de 'Enter prensa' en JTextField, es mejor mantener la lógica dentro del bloque en lugar de keyTyped() & keyPressed()keyReleased().

+1

-1 :(para repetir el mismo error nuevamente, que ya ha sido votado negativamente en las respuestas anteriores, junto con la razón especificada para el mismo. 'KeyListeners' está demasiado bajo nivel desde la perspectiva de' Swing'. la API que está destinada a ser utilizada con 'Swing' :-) –

1

primero Añadir comando de acción en JButton o JTextField por:

JButton.setActionCommand("name of command"); 
JTextField.setActionCommand("name of command"); 

A continuación, agregue ActionListener tanto JTextField y JButton.

JButton.addActionListener(listener); 
JTextField.addActionListener(listener); 

Después de eso, en que ActionListener aplicación escribir

@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 
    } 
} 
-2

sólo tiene que utilizar este código:

SwingUtilities.getRootPane(myButton).setDefaultButton(myButton); 
0

Si desea establecer una acción de botón predeterminado en un JTextField entrar, usted tiene para hacer esto:

//put this after initComponents(); 

textField.addActionListener(button.getActionListeners()[0]); 

Es [0] porque un botón puede tener muchas acciones, pero normalmente solo tiene uno (ActionPerformed).

1

¿Desea hacer algo como esto?

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(); 
      } 
     } 

    }); 
1

Las otras respuestas (incluyendo los aceptados) son buenos, pero si ya utiliza Java8, puede hacer lo siguiente (en un camino más corto, más reciente):

textField.addActionListener(
    ae -> { 
     //dostuff 
    } 
); 

A medida que el aceptado respuesta dicha, simplemente puede reaccionar con un ActionListener, que captura la tecla Enter.

Sin embargo, mi enfoque tiene el beneficio de los conceptos funcionales que se introdujo en Java 8.

Si desea utilizar la misma acción, por ejemplo para un botón y el JTextField, puede hacer lo siguiente:

ActionListener l = ae -> { 
    //do stuff 
} 

button.addActionListener(l); 
textField.addActionListener(l); 

Si necesita más información, ¡por favor hágamelo saber!

Cuestiones relacionadas