KeyEvent - Probleme

Status
Nicht offen für weitere Antworten.
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:

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!
 

derHai

Mitglied
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.

Ich habe deine Demo ausprobiert - und sie tut etwas anders: Wenn ich mich beim ersten mal einloggen möchte, läuft alles so wie es sollte. Versuche ich es jedoch noch einmal, dann wird beim Drücken der Enter-Taste nach der Eingabe des Namens nicht zum Pwd-Feld geschaltet, sondern direkt Ok gedrückt... très étrange...

[/quote]
 

derHai

Mitglied
Hmm. Ich habe keine Ahnung. Ich kann dir nur so weit helfen, dass nach dem ersten Durchlauf (also nach dem das erste mal Ok gedrückt wurde) beim Drücken der Enter-Taste die "keyReleased" und die "actionPerformed" Methode gleichzeitig ausgeführt werden....

Ich könnte dir jedoch einen Rat geben (ob es hilft, weiß ich nicht, da ich jetzt meine Zeit mit Deutschhaushaufgaben versch... ähhh verbringen muss :### und es somit nicht testen kann):
Mir erscheint die Verbindung von ActionListener und J-Dialog etws spanisch (ich erstelle grundsätzlich für meine Listener Inner-Classes), vieleicht liegt da das Problem... ???:L (kann ich jedoch nicht rational begründen)

mfg Merlin
 
B

Beni

Gast
Ein fieser Fehler...

Alle KeyEvents werden derjenigen Component zugeschoben, welche den Fokus hat.
Wird nun im Message-Dialog Enter gedrückt, geschieht folgendes:

- ein "keyPressed"-Event wird verschickt. Der Button empfängt dieses Event
- Der Button verschickt ein ActionEvent. Damit schliesst der Dialog.
- Dadurch kann deine Implementation von "actionPerformed" weitermachen
- "username" erhält den Fokus
- ein "keyReleased"-Event wird verschickt, Deine Implementation empfängt es...

P.S. den Ablauf kannst du ganz schön sehen, wenn du die Enter-Taste ein paar Sekunden gedrückt hältst.


Man kann das verhindern, wenn man den Code ein bisschen abändert:
Code:
    private class KeyListener extends KeyAdapter{
      private KeyEvent pressed;
      
      public void keyPressed( KeyEvent e ){
        pressed = e;
      }
      
        public void keyReleased (KeyEvent e){
          if( pressed != null && pressed.getSource() == e.getSource() ){
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
              if (e.getSource() == password)
                okButton.requestFocus();
              else if (e.getSource() == username)
                password.requestFocus();
            }
          }
        }
    }

Wow, das ist mal ein Fehler!

mfg Beni
 
G

Gast

Gast
Hallo!

Vielen Dank für die Zeit, die Ihr in mein kleines aber lästiges Problem investiert habt - im Besonderen natürlich für die Lösung samt ausführlicher Erklärung.

Wow, das ist mal ein Fehler!

Freut mich, dass ich Euch auch mal ein wenig fordern konnte! :wink:

Grüsse,
--Alex
 
G

Gast

Gast
Du könntest aber auch aus dem "public void keyReleased..." ein "public void keyPressed..." machen, und alles andere so lassen wie es ist. Dann würde lediglich beoi gehaltener Return-Taste der Dialog mehrmals durchlaufen...
 
B

Beni

Gast
P.S.
@Gast
Nur so zum sagen...

... der Thrad ist 7 Monate alt, und wird wohl nicht mehr gelesen :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX JFoenix TextField KeyEvent AWT, Swing, JavaFX & SWT 2
L JavaFX ASCII Zeichen /char von KeyEvent erhalten AWT, Swing, JavaFX & SWT 5
Wurstkopp JavaFX JavaFX KeyEvent kein Zahlencode um unbekannte Mediatasten auszuwerten? AWT, Swing, JavaFX & SWT 0
B JavaFX Wo liegt mein Gedankenfehler ??? KeyEvent geht nicht ... AWT, Swing, JavaFX & SWT 8
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
dat_vin KeyEvent jTextField AWT, Swing, JavaFX & SWT 12
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
B Event Handling KeyEvent für "+"-Tase auf dem Numpad? AWT, Swing, JavaFX & SWT 2
R Integer to KeyEvent AWT, Swing, JavaFX & SWT 2
sylo STRG + TAB KeyEvent abfangen AWT, Swing, JavaFX & SWT 6
earlgrey_tea KeyEvent reagiert nicht auf Eingabe ("Pausentaste") AWT, Swing, JavaFX & SWT 11
Luk10 KeyEvent ... AWT, Swing, JavaFX & SWT 6
M KeyEvent, KEY_TYPED & backspace/left/right. AWT, Swing, JavaFX & SWT 3
H KeyEvent für JFrame AWT, Swing, JavaFX & SWT 3
S Spezielles KeyEvent AWT, Swing, JavaFX & SWT 6
Luma AWTEventListener KeyEvent und KEY_TYPED AWT, Swing, JavaFX & SWT 5
P KeyEvent methode an actionEvent methode weiterleiten AWT, Swing, JavaFX & SWT 5
A KeyEvent bei TAB-Druck AWT, Swing, JavaFX & SWT 10
J KeyEvent bei JTable mehrmals hintereinander ausführen AWT, Swing, JavaFX & SWT 9
J KeyEvent STRG+l, CTRL_DOWN_MASK AWT, Swing, JavaFX & SWT 7
I Pfeiltasten für KeyEvent AWT, Swing, JavaFX & SWT 4
G Windows Taste in KeyEvent? AWT, Swing, JavaFX & SWT 4
M KeyEvent - Programm mit ESC beenden AWT, Swing, JavaFX & SWT 7
H KeyEvent Leerzeichen und Backspace funktioren nicht! HILFE! AWT, Swing, JavaFX & SWT 2
S KeyEvent im JPanel AWT, Swing, JavaFX & SWT 3
G Suche einen KeyEvent für die Taste "ä" AWT, Swing, JavaFX & SWT 7
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben