Ist es möglich zu erkennen, wenn jemand drückt, Enterwährend er ein JTextField in Java eingibt? Ohne eine Schaltfläche erstellen und als Standard festlegen zu müssen.
Ist es möglich zu erkennen, wenn jemand drückt, Enterwährend er ein JTextField in Java eingibt? Ohne eine Schaltfläche erstellen und als Standard festlegen zu müssen.
Antworten:
A JTextField
wurde entwickelt, um ein ActionListener
genau wie ein JButton
is zu verwenden. Siehe die addActionListener()
Methode von JTextField
.
Beispielsweise:
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 EnterSchlüssel verwendet wird.
Ein zusätzlicher 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 );
Hinweis Dieses Beispiel verwendet ein Action
, die implementiert , ActionListener
da Action
eine neuere API mit Zusatz - Features ist. Sie können beispielsweise Action
das Ereignis deaktivieren, das das Ereignis sowohl für das Textfeld als auch für die Schaltfläche deaktiviert.
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
Alles was Sie tun müssen, ist AddActionListener zum JTextField wie oben! Nachdem Sie gedrückt haben, wird Enterdie Aktion ausgeführt, was Sie bei der Anweisung wollen!
Fügen Sie ein Ereignis für hinzu KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
haben viele Mängel, die in größerem Maße behoben werden KeyBindings
, z. B. durch Fokus, Kopieren / Einfügen und viele, viele mehr. Es ist zu vermeiden für triviale Aufgaben, wie sie im OP gefordert werden.
Möchtest du so etwas machen?
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();
}
}
});
Fügen Sie zuerst einen Aktionsbefehl für JButton oder JTextField hinzu, indem Sie:
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
}
}
Die anderen Antworten (einschließlich der akzeptierten) sind gut, aber wenn Sie bereits Java8 verwenden, können Sie Folgendes tun (auf kürzere, neuere Weise):
textField.addActionListener(
ae -> {
//dostuff
}
);
Wie die akzeptierte Antwort sagte, können Sie einfach mit einem reagieren ActionListener
, der die Eingabetaste fängt.
Mein Ansatz nutzt jedoch die in Java 8 eingeführten Funktionskonzepte.
Wenn Sie dieselbe Aktion beispielsweise für eine Schaltfläche und das JTextField verwenden möchten, können Sie Folgendes tun:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Wenn weitere Erklärungen erforderlich sind, lassen Sie es mich bitte wissen!
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]);
Dies ist [0], da eine Schaltfläche viele Aktionen enthalten kann, normalerweise jedoch nur eine (ActionPerformed).
Rufen Sie für jedes Textfeld in Ihrem Frame die Methode addKeyListener auf. Implementieren und überschreiben Sie dann die keyPressed-Methode, wie andere angegeben haben. Jetzt können Sie in einem beliebigen Feld Ihres Frames die Eingabetaste drücken, um Ihre Aktion zu aktivieren.
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
public void keyReleased(KeyEvent e)
{
int key=e.getKeyCode();
if(e.getSource()==textField)
{
if(key==KeyEvent.VK_ENTER)
{
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
}
}
Um Logik für 'Enter Press' zu schreiben JTextField
, ist es besser, die Logik innerhalb des keyReleased()
Blocks zu halten , anstatt keyTyped()
& keyPressed()
.
KeyListeners
Sind aus Swing
der Sicht viel zu niedrig . Verwenden Sie die API, die sein soll verwendet mit Swing
:-)
Verwenden Sie einfach diesen Code:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);