G
Gast
Gast
Hallo!
Ich schreibe gerade einen Login Dialog. Drückt man im Benutzername - Textfeld die Enter Taste, dann soll das Passwortfeld den Fokus erhalten und drückt man im Passwortfeld die Enter Taste, dann soll der Ok - Button den Fokus
erhalten. Sollte beim Login irgendetwas schief laufen, dann möchte ich, dass ein Dialog angezeigt wird, der den Benutzer vom Fehlschlagen des Logins informiert, beide Eingabefelder gelöscht werden und das Textfeld für die Eingabe des Benutzernamens den Fokus erhält.
Das Problem liegt nun darin, dass bei fehlgeschlagenem Login nicht das Benutzername - Textfeld den Fokus erhält, sondern das Passwortfeld. Offensichtlich wird das Drücken der Enter - Taste des Ok - Buttons bzw. des Buttons im Dialog nocheinmal verarbeitet, sobald das Benutzername - Textfeld den Fokus erhält.
Das Problem tritt nur dann auf, wenn man die Buttons mit der Enter - Taste betätigt anstatt die Maus zu verwenden.
Folgendes Demo -Programm zeigt das beschriebene Verhalten:
Vielen Dank für Eure Hilfe!
Ich schreibe gerade einen Login Dialog. Drückt man im Benutzername - Textfeld die Enter Taste, dann soll das Passwortfeld den Fokus erhalten und drückt man im Passwortfeld die Enter Taste, dann soll der Ok - Button den Fokus
erhalten. Sollte beim Login irgendetwas schief laufen, dann möchte ich, dass ein Dialog angezeigt wird, der den Benutzer vom Fehlschlagen des Logins informiert, beide Eingabefelder gelöscht werden und das Textfeld für die Eingabe des Benutzernamens den Fokus erhält.
Das Problem liegt nun darin, dass bei fehlgeschlagenem Login nicht das Benutzername - Textfeld den Fokus erhält, sondern das Passwortfeld. Offensichtlich wird das Drücken der Enter - Taste des Ok - Buttons bzw. des Buttons im Dialog nocheinmal verarbeitet, sobald das Benutzername - Textfeld den Fokus erhält.
Das Problem tritt nur dann auf, wenn man die Buttons mit der Enter - Taste betätigt anstatt die Maus zu verwenden.
Folgendes Demo -Programm zeigt das beschriebene Verhalten:
Code:
public class KeyEventDemo extends JDialog implements ActionListener
{
private JTextField username;
private JPasswordField password;
private JButton okButton;
public KeyEventDemo()
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ex)
{
}
KeyListener keyListener = new KeyListener();
getContentPane().setLayout(new FlowLayout());
username = new JTextField(10);
username.addKeyListener(keyListener);
getContentPane().add(username);
password = new JPasswordField(10);
password.addKeyListener(keyListener);
getContentPane().add(password);
okButton = new JButton("Ok");
okButton.setActionCommand("BTN_OK");
okButton.addActionListener(this);
getContentPane().add(okButton);
setSize(130, 120);
setLocationRelativeTo(null);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("BTN_OK") )
{
JOptionPane.showMessageDialog(null, "Login fehlgeschlagen!");
username.setText("");
password.setText("");
username.requestFocus();
}
}
private class KeyListener extends KeyAdapter
{
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
if ( e.getSource() instanceof JPasswordField)
okButton.requestFocus();
else if (e.getSource() instanceof JTextField)
password.requestFocus();
}
}
}
public static void main(String[] args)
{
new KeyEventDemo();
}
}
Vielen Dank für Eure Hilfe!