Rileva invio premi in JTextField

È ansible rilevare quando qualcuno preme Invio durante la digitazione in un JTextField in java? Senza dover creare un pulsante e impostarlo come predefinito.

Un JTextField stato progettato per utilizzare un ActionListener proprio come un JButton . Vedi il metodo addActionListener() di JTextField .

Per esempio:

 Action action = new AbstractAction() { @Override public void actionPerformsd(ActionEvent e) { System.out.println("some action"); } }; JTextField textField = new JTextField(10); textField.addActionListener( action ); 

Ora l’evento viene triggersto quando si utilizza il tasto Invio .

Inoltre, un ulteriore vantaggio è che è ansible condividere l’ascoltatore con un pulsante anche se non si desidera rendere il pulsante un pulsante predefinito.

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

Nota, questo esempio utilizza Action , che implementa ActionListener perché Action è una API più recente con funzionalità di aggiunta. Ad esempio è ansible disabilitare l’ Action che disabilita l’evento sia per il campo di testo che per il pulsante.

 JTextField function=new JTextField(8); function.addActionListener(new ActionListener(){ public void actionPerformsd(ActionEvent e){ //statements!!! }}); 

tutto ciò che devi fare è aggiungereActionListener al JTextField come sopra! Dopo aver premuto Invio, l’azione eseguirà ciò che desideri nella dichiarazione!

Aggiungi un evento per KeyPressed .

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

Vuoi fare qualcosa del genere?

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

Innanzitutto aggiungi il comando action su JButton o JTextField di:

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

Quindi aggiungere ActionListener a JTextField e JButton.

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

Dopodiché, su di te l’implementazione ActionListener scrive

 @Override public void actionPerformsd(ActionEvent e) { String actionCommand = e.getActionCommand(); if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your actionCommand for press Enter")) { //Do something } } 

Le altre risposte (comprese quelle accettate) sono buone, ma se usi già Java8, puoi fare quanto segue (in un modo più breve e più recente):

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

Come ha detto la risposta accettata, puoi semplicemente reactjs con un ActionListener , che cattura la chiave di invio.

Tuttavia, il mio approccio si avvantaggia dei concetti funzionali introdotti in Java 8.

Se si desidera utilizzare la stessa azione, ad esempio per un pulsante e JTextField, è ansible effettuare le seguenti operazioni:

 ActionListener l = ae -> { //do stuff } button.addActionListener(l); textField.addActionListener(l); 

Se è necessaria un’ulteriore spiegazione, per favore fatemelo sapere!

Se si desidera impostare un’azione di pulsante predefinita in un campo JText, è necessario eseguire questa operazione:

 //put this after initComponents(); textField.addActionListener(button.getActionListeners()[0]); 

È [0] perché un pulsante può avere molte azioni, ma normalmente ne ha solo uno (ActionPerformsd).

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

Per scrivere la logica per “Invio premere” in JTextField , è meglio mantenere la logica all’interno del blocco keyReleased() anziché keyTyped() e keyPressed() .

Basta usare questo codice:

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