2016-08-10 2 views
0

Я новичок в Java. Я хочу сделать программу регистрации, которую я буду использовать позже для входа. Я хочу заставить пользователя ввести свое имя пользователя (KorisnickoIme), пароль (Lozinka) и повторить пароль (PLozinka); сравнение Lozink a с PLozinka; и если все это хорошо, добавьте Lozinka в качестве значения к хэш-карте с ключом KorisnickoIme.Регистрация с помощью HashMaps Java Swing

Проблема в том, что когда я печатаю lozinka, я ничего не получаю. Это значит, что я тоже ничего не получил на карте Хэша, и я не могу использовать его позже для входа в систему.

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 ГПИ должны работать на разных ОС», размер экрана, разрешение экрана и т. д., используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). 2. Чтобы лучше помочь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). .. –

+2

Пожалуйста, прочитайте о руководствах по стилю java. Имена переменных всегда начинаются с нижнего регистра; кроме CONSTANTS. Тогда я бы предложил: немного почитать о «статических» и «нестатических» методах/полях. Вы используете статику по всему месту, и это просто не очень хорошая идея. В-третьих: не делайте этого. У вас нет нескольких «вещей», где вы используете setText1, setText2 и т. Д. Это просто очень плохая практика. Используйте имена, которые говорят, что вещь за названием ** **. – GhostCat

+2

.. 3) Один из способов получить изображение (-ы) для примера - это горячая ссылка на изображения, увиденные в [этот вопрос и ответы] (http://stackoverflow.com/q/19209650/418556). 4) Пожалуйста, изучите общую номенклатуру Java (соглашения об именах - например, 'EveryWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', если это не 'UPPER_CASE_CONSTANT') и использовать ее последовательно. –

ответ

0
Lozinka = textField2.getText(); 

Вы читаете текстовое поле сразу после его создания, когда он по-прежнему пусто. Вы должны сделать это в ваших ActionListener «ы actionPerformed метод, например:

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

    // compare 
}); 

Или стандартным способом, если вам не нравится лямбды:

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

     // compare  
    } 
}); 
+0

Это фактически решило мою проблему. Кто-то дает этому человеку печенье! –