JPasswordField

Wave

Mitglied
Hallo,

ich möchte die Eingabe in einem Feld für Passwörter überprüfen. Es soll ein Fenster erscheinen, falls es richtig war oder nicht.
Unter https://docs.oracle.com/javase/tutorial/uiswing/components/passwordfield.html habe ich schon eine Anleitung gefunden.
Bei mir gibt es die Fehlermeldung, dass die Variable "OK" nicht gefunden wird. Außerdem kommen die Fenster nicht, wenn man auf den Button klickt. Im Tutorial von Oracle wird auch "OK" verwendet.
Kann bitte einer helfen?

Java:
import java.awt.*;
import javax.swing.*;

public class Password{
    
    private JFrame fr;
    private JPanel pa;   // falls kein Panel eingesetzt wird, ist das gesamte Fenster eine Schaltflaeche
    private JLabel la;
    private JButton bu;
    private JPasswordField pf;
    private MyWindowListener mwl;
    private MyActionListener mal;
    
    public Password(){
        fr = new JFrame("Fenstertitel");
        pa = new JPanel();
        la = new JLabel("Geben Sie hier Ihr Passwort ein:");
        bu = new JButton("OK");
        pf = new JPasswordField(10);
        mwl = new MyWindowListener();
        mal = new MyActionListener();
        fr.setSize(300, 300);
        fr.setVisible(true);
        fr.addWindowListener(mwl);
        bu.addActionListener(mal);
        pf.setActionCommand(OK);
        pf.addActionListener(mal);
        pa.add(la);
        pa.add(pf);
        pa.add(bu);
        fr.add(pa);
    }
    
    public char[] passwortGeben(){
        return pf.getPassword();
    }
    
    public JPasswordField pfGeben(){
        return pf;
    }
}


import java.awt.event.*;
import javax.swing.*;

public class MyActionListener implements ActionListener{
    
    private Password p;
    private JFrame fr = new JFrame();

    public void actionPerformed(ActionEvent e){
        String cmd = e.getActionCommand();
        if(OK.equals(cmd)){
            char[] input = p.passwortGeben();
            if(isPasswordCorrect(input)){
                JOptionPane.showMessageDialog(fr, "Korrektes Passwort eingegeben!");
            }
            else{
                JOptionPane.showMessageDialog(fr, "Falsches Passwort eingegeben!", "Error Message", JOptionPane.ERROR_MESSAGE);
            }
            for(int i = 0; i < input.length; i++){
                input[i] = 0;
            }
        }
    }
    
    private static boolean isPasswordCorrect(char[] input) {
        boolean isCorrect = true;
        char[] correctPassword = { 't', 'r', 'u', 'e'};

        if (input.length != correctPassword.length) {
            isCorrect = false;
        }
        else{
            for(int i = 0; i < input.length; i++){
                if(input[i] != correctPassword[i]){
                    isCorrect = false;
                }  
            }
        }
        for(int i = 0; i < correctPassword.length; i++){
            correctPassword[i] = 0;
        }
        return isCorrect;
    }
}

import java.awt.event.*;

public class MyWindowListener extends WindowAdapter{

    public void windowClosing(WindowEvent e){
        System.exit(0); // Vorzeitige Beendigung der Applikation
    } 
}

public class Testablauf{

    public static void main(String args[]){
        Password p = new Password();
    } 
}
 

Diabolus

Aktives Mitglied
Hallo Wave,

es existiert ja auch keine Variable OK in deinem Code. :)
Ersetze Zeile 55 durch diese

if(cmd.equals("OK"){

mfg Diabolus
 
Zuletzt bearbeitet:

Wave

Mitglied
Ok, danke. Nun geht das übersetzen...

Allerdings kommt kein Fenster, wenn ich ein Passwort in die Zeile eingebe und dann auf den Button mit dem Wort OK klicke...
 

Enceladus271

Bekanntes Mitglied
Vielleicht weil in Zeile 56 eine NullPointerException auftritt? Wenn ich richtig sehe wird in deinem ActionListener die Variable p nicht gesetzt und ist immer null. Du müsstest in deinem ActionListener einen Konstruktor definieren der p setzt.
 

Diabolus

Aktives Mitglied
Allerdings müsstes du eine eine Referenz von der Password-Klasse als Parameter der MyActionListener-Klasse übergeben, das wenn du in der MyActionListener-Klasse nochmal eine Instanz der Password-Klasse erstellst in eine Unendlichkeitsschleife geraten würdest!
Also einfach in Zeile 22 Als Parameter this übergeben und noch einen kleinen Konstruktor in der MyActionListener-Klasse schreiben wie etwa so
Java:
MyActionListener(Password p) {
    	this.p = p;
    }
und dann müsste es auch schon funktionieren.
mfg Diabolus
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
OlafHD JPasswordField mit Button eingeben AWT, Swing, JavaFX & SWT 4
J JPasswordField kodiertes Passwort AWT, Swing, JavaFX & SWT 3
C Swing JPasswordField wird nicht angezeigt AWT, Swing, JavaFX & SWT 27
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
B Text im JPasswordField AWT, Swing, JavaFX & SWT 5
C Swing JPasswordField Password auslesen AWT, Swing, JavaFX & SWT 7
Y Swing JPasswordField Fehler AWT, Swing, JavaFX & SWT 14
M Swing jPasswordField getPassword() entschlüsseln AWT, Swing, JavaFX & SWT 9
W Swing JPasswordField "leeren" AWT, Swing, JavaFX & SWT 3
H JPasswordField AWT, Swing, JavaFX & SWT 27
M JPasswordfield.getpassword() char[] nicht codiert auslesen? AWT, Swing, JavaFX & SWT 2
G JPopMenu und JPasswordField? AWT, Swing, JavaFX & SWT 7
K JPasswordField AWT, Swing, JavaFX & SWT 3
A Aus einem JPasswordField das Passwort auslesen AWT, Swing, JavaFX & SWT 3
Z Probleme mit JtextField und JPasswordField AWT, Swing, JavaFX & SWT 4
S JPasswordField warning : deprecation AWT, Swing, JavaFX & SWT 10
T Suche Methode zum anzeigen eines Textteils im JPasswordfield AWT, Swing, JavaFX & SWT 2
M JPasswordField AWT, Swing, JavaFX & SWT 7
F Eingabe in JPasswordField auf vier Zeichen beschränken AWT, Swing, JavaFX & SWT 3
W JPasswordField AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen


Oben