# Einloggen auch per ENTER Taste (KeyListener Problem)



## Clara85 (7. Jun 2006)

Hallo ich habe eine kleine Frage zu einem Java Problem,

ich habe eine JFrame GUI erstellt, in welcher man sich mit Benutzername und Passwort einloggen kann. Dies geschieht über einen JButton, der gedrückt werden muss.

Ich möchte allerdings gerne eine Funktion integrieren, welche das einloggen auch per "ENTER" Taste zulässt, wenn man die beiden Textfelder ausgefüllt hat, eben so wie man es aus vielen Anwendungen kennt.


Allerdings habe ich es bis jetzt noch nicht hinbekommen, das Problem zu lösen, denn verschieden Versuche mit einem KeyPressed / KeyListener schlugen bis jetzt leider fehl. Kann mir bei diesem Problem jemand weiterhelfen?


----------



## Wildcard (7. Jun 2006)

Warum nicht einfach einen ActionListener auf das Textfeld?


----------



## Guest (7. Jun 2006)

Wildcard hat gesagt.:
			
		

> Warum nicht einfach einen ActionListener auf das Textfeld?



Hm, die ENTER Taste soll ja erst die gleiche Funktion besitzen wie der Login Button, wenn beide Textfelder ausgefüllt sind.


----------



## Wildcard (7. Jun 2006)

Was du ja dann in der actionPerformed realisieren kannst.


----------



## clemson (7. Jun 2006)

hmm, so in etwa (die überprüfungen fehlen, ob beide felder ausgefüllt wurden...)


```
package org.javaforum.y06.june.enter;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class EnterTest extends JFrame implements ActionListener, KeyListener
{

	public static void main(String[] args)
	{
		new EnterTest();
	}

	private JTextField usernameField;
	private JPasswordField passwordField;
	private JButton loginButton;

	public EnterTest()
	{
		super("Enter Test");
		setLayout(new GridLayout(3, 1));

		usernameField = new JTextField("username");
		add(usernameField);

		passwordField = new JPasswordField();
		passwordField.setEchoChar('*');
		passwordField.addKeyListener(this);
		add(passwordField);

		loginButton = new JButton("login");
		loginButton.addActionListener(this);
		add(loginButton);

		setSize(200, 50);
		pack();
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource() == loginButton)
		{
			loginUser();
		}
	}

	public void keyTyped(KeyEvent e)
	{
		// not needed
	}

	public void keyPressed(KeyEvent e)
	{
		if (e.getKeyCode() == KeyEvent.VK_ENTER)
		{
			loginUser();
		}
	}

	public void keyReleased(KeyEvent e)
	{
		// not needed
	}

	private void loginUser()
	{
		String username = usernameField.getText();
		String password = new String(passwordField.getPassword());
		System.out.println("Login user '" + username + "' with password '" + password + "'");
	}

}
```


----------



## Caffè Latte (8. Jun 2006)

Hi,

am einfachsten finde ich es, wenn du den Button zum Default-Button machst. Dann reagiert der automatisch auf die Enter-Taste:


```
getRootPane().setDefaultButton(loginButton);
```

in den Konstruktor.

Nur mal so als Idee ...


----------



## Eldaron (8. Jun 2006)

Also das mit dem Button würde ungefähr so gehen:

```
myButton.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e)
            {
                if (e.getKeyCode() == 10)
                {
                    meineDolleFunktion();
                }
            }
        });
```


----------



## clemson (8. Jun 2006)

Eldaron hat gesagt.:
			
		

> Also das mit dem Button würde ungefähr so gehen:
> 
> ```
> myButton.addKeyListener(new KeyAdapter() {
> ...



hmm, da würd ich aber doch eher auf gleichheit mit einer konstante vergleichen, damit man den code auch "lesen" kann...


```
if (e.getKeyCode() == KeyEvent.VK_ENTER )
```


----------



## RawBit (8. Jun 2006)

Caffè Latte hat gesagt.:
			
		

> Hi,
> 
> am einfachsten finde ich es, wenn du den Button zum Default-Button machst. Dann reagiert der automatisch auf die Enter-Taste:
> 
> ...



nimm einfach diesen vorschlag, das ist der beste


----------

