web-dev-qa-db-de.com

Erfassen Sie enter press in JTextField

Ist es möglich zu erkennen, wenn jemand drückt Enter während der Eingabe eines JTextField in Java? Ohne eine Schaltfläche erstellen und als Standard festlegen zu müssen.

96
a sandwhich

Ein JTextFieldwurde entwickelt, um einen ActionListenernamen__ zu verwenden, genau wie es ein JButtonist. Siehe die Methode addActionListener() von JTextFieldname__.

Zum Beispiel:

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

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

Jetzt wird das Ereignis ausgelöst, wenn der Enter Schlüssel wird verwendet.

Ein weiterer Vorteil ist, dass Sie den Listener für eine Schaltfläche freigeben können, auch wenn Sie die Schaltfläche nicht als Standardschaltfläche festlegen möchten.

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

Beachten Sie, dass in diesem Beispiel ein Actionverwendet wird, der ActionListenerimplementiert, da Actioneine neuere API mit zusätzlichen Funktionen ist. Zum Beispiel könnten Sie Actiondeaktivieren, wodurch das Ereignis sowohl für das Textfeld als auch für die Schaltfläche deaktiviert wird.

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

                public void actionPerformed(ActionEvent e){

                        //statements!!!

                }});

alles, was Sie tun müssen, ist, wie oben beschrieben, den ActionListener zum JTextField hinzuzufügen! Nachdem Sie gedrückt haben Enter Die Aktion wird ausgeführt, was Sie auf der Anweisung wollen!

21
kyorilys

Fügen Sie ein Ereignis für KeyPressed hinzu.

private void jTextField1KeyPressed(Java.awt.event.KeyEvent evt) {
  if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
      // Enter was pressed. Your code goes here.
   }
} 
12
Ionică Bizău

Möchten Sie so etwas tun? 

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

    });

Die anderen Antworten (einschließlich der akzeptierten) sind gut. Wenn Sie jedoch bereits Java8 verwenden, können Sie Folgendes tun (auf kürzere, neuere Weise):

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

Wie die akzeptierte Antwort mitteilt, können Sie einfach mit einer ActionListener reagieren, die den Enter-Key fängt.

Mein Ansatz nutzt jedoch die funktionalen Konzepte, die in Java 8 eingeführt wurden.

Wenn Sie dieselbe Aktion beispielsweise für eine Schaltfläche und das JTextField verwenden möchten, haben Sie folgende Möglichkeiten:

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

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

Wenn weitere Erklärungen erforderlich sind, lass es mich wissen!

1
Thomas Böhm

Fügen Sie zunächst den Aktionsbefehl für JButton oder JTextField hinzu:

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

Fügen Sie dann ActionListener zu JTextField und JButton hinzu.

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

Danach schreiben Sie auf Ihre ActionListener-Implementierung

@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
    }
}
1
greg

Wenn Sie eine Standardschaltflächenaktion in einer JTextField-Eingabe festlegen möchten, müssen Sie Folgendes tun:

//put this after initComponents();

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

Es ist [0], weil eine Schaltfläche viele Aktionen hat, normalerweise aber nur eine (ActionPerformed).

0
JACA