2016-08-10 5 views
0

Ich bin neu in Java. Ich möchte ein Registrierungsprogramm erstellen, das ich später für die Anmeldung verwenden werde. Ich möchte, dass der Benutzer seinen Benutzernamen (KorisnickoIme), das Passwort (Lozinka) und das Passwort (PLozinka) eingibt; vergleiche Lozink a mit PLozinka; und wenn alles gut ist, füge Lozinka als Wert zu einer Hash-Karte mit dem Schlüssel KorisnickoIme hinzu.Registrierung mit HashMaps Java Swing

Das Problem ist, dass, wenn ich drucke, bekomme ich nichts. Das bedeutet also, dass ich auch nichts in der Hash-Map habe, und ich kann es später nicht für Login-Sachen verwenden.

public class RegistrujSeProzor { 
    static HashMap<String, Object> korisnici = new HashMap<>(); 

    static String KorisnickoIme = ""; 
    static String Lozinka = ""; 
    static String PLozinka = ""; 

    static void prozor() { 
     JFrame prozor = new JFrame(); 
     prozor.setLayout(null); 
     prozor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     prozor.setIconImage(new ImageIcon("res/purple.png").getImage()); 
     prozor.setVisible(true); 
     prozor.setSize(400, 300); 
     prozor.setLocationRelativeTo(null); 
     prozor.setResizable(false); 

     Container contentPane = prozor.getContentPane(); 

     JLabel label1 = new JLabel("Novo Korisnicko Ime : "); 
     JLabel label2 = new JLabel("Nova Lozinka : "); 
     JLabel label3 = new JLabel("Ponovte Lozinku : "); 

     label1.setBounds(10, 20, 200, 30); 
     label2.setBounds(10, 50, 200, 30); 
     label3.setBounds(10, 80, 200, 30); 

     contentPane.add(label1); 
     contentPane.add(label2); 
     contentPane.add(label3); 

     JTextField textField = new JTextField(20); 
     contentPane.add(textField); 
     textField.setBounds(140, 26, 200, 20); 
     KorisnickoIme = textField.getText(); 

     JTextField textField2 = new JTextField(20); 
     contentPane.add(textField2); 
     textField2.setBounds(140, 57, 200, 20); 
     Lozinka = textField2.getText(); 

     JTextField textField3 = new JTextField(20); 
     contentPane.add(textField3); 
     textField3.setBounds(140, 88, 200, 20); 
     PLozinka = textField3.getText(); 

     JButton dPotvrdi = new JButton("Potvrdi"); 
     dPotvrdi.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       if (Lozinka.equals(PLozinka)) { 
        korisnici.put(KorisnickoIme, Lozinka); 
        UlogujSeProzor.main(null); 
        prozor.dispose(); 
        System.out.println(Lozinka); 

       }else{ 
        JOptionPane.showMessageDialog(null,"Pogresno uneto Novo Korisnicko ime ili Lozinka ! " 
          + "Pokusajte ponovo ."); 
        RegistrujSeProzor.main(null); 
       } 
      } 
     }); 

     JButton dNazad = new JButton("Nazad"); 
     dNazad.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       LoginRegisterProzor.main(null); 
       prozor.dispose(); 
      } 
     }); 

     contentPane.add(dPotvrdi); 
     contentPane.add(dNazad); 

     dPotvrdi.setBounds(215, 215, 150, 30); 
     dNazad.setBounds(15, 215, 150, 30); 
    } 

    public static String getText() { 
     return KorisnickoIme; 
    } 

    public static void setText(String text) { 
     RegistrujSeProzor.KorisnickoIme = text; 
    } 

    public static String getText2() { 
     return Lozinka; 
    } 

    public static void setText2(String text2) { 
     RegistrujSeProzor.Lozinka = text2; 
    } 

    public static String getText3() { 
     return PLozinka; 
    } 

    public static void setText3(String text3) { 
     RegistrujSeProzor.PLozinka = text3; 
    } 

    public static void main(String[] args) { 
     prozor(); 
    } 
+2

1. Java GUIs haben auf verschiedenen OS arbeiten', Bildschirmgröße, Bildschirmauflösung usw. unter Verwendung verschiedener PLAFs an verschiedenen Orten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). 2. Um eine bessere Hilfe zu erhalten, veröffentlichen Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/). .. –

+2

Bitte lesen Sie über Java-Anleitungen. Variablennamen beginnen immer in Kleinbuchstaben; außer CONSTANTS. Dann würde ich vorschlagen: Lesen Sie etwas über "statische" gegenüber "nicht-statischen" Methoden/Felder. Sie verwenden überall statische Daten, und das ist einfach keine gute Idee. Drittens: Tu das nicht. Haben Sie nicht mehrere "Dinge", wo Sie SetText1, SetText2 und so weiter tun. Das ist einfach eine sehr schlechte Übung. Verwenden Sie Namen, die sagen, was das Ding hinter dem Namen ** ist **. – GhostCat

+2

.. 3) Eine Möglichkeit, Bilder für ein Beispiel zu erhalten, besteht darin, eine direkte Verknüpfung zu Bildern herzustellen, die in [this Q & A] (http://stackoverflow.com/q/19209650/418556) zu sehen sind. 4) Bitte lerne die gängige Java-Nomenklatur (Namenskonventionen - z. B. 'EachWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', es sei denn, es handelt sich um ein 'UPPER_CASE_CONSTANT') und benutze es konsistent. –

Antwort

0
Lozinka = textField2.getText(); 

Du liest das Textfeld direkt nach seiner Erstellung, als es noch leer ist. Sie sollten tun, dass in Ihrem ActionListener 's actionPerformed Verfahren, zum Beispiel:

button.addActionListener(e -> { 
    String password1 = passwordField.getText(); 
    String password2 = repeatPasswordField.getText(); 

    // compare 
}); 

oder der normale Weg, wenn Sie nicht mögen die Lambda-Ausdrücke:

button.addActionListener(new ActionListener() { 
    @Override  
    public void actionPerformed(ActionEvent e) { 
     String password1 = passwordField.getText(); 
     String password2 = repeatPasswordField.getText(); 

     // compare  
    } 
}); 
+0

Das hat mein Problem gelöst. Jemand gibt diesem Mann einen Keks! –