Как мне обновить sh информацию из текстовых полей в этом l oop? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь сделать логин GUI, который закрывается при вводе правильной комбинации имени пользователя и пароля. Когда я правильно ввожу их, это работает нормально, но если введена неправильная комбинация, l oop просто повторяет с теми же значениями "u" и "pw", мешая мне печатать что-нибудь еще.

Я попытался добавить logB.setSelected(false); в конце времени l oop, но он все еще не позволяет мне вводить новые значения.

(Кстати, я знаю, что неверный пароль Метка отображается с самого начала, но я просто пытаюсь решить эту проблему прямо сейчас.Кроме того, класс Login начинался как CLI, так что в коде остались некоторые его остатки, но я просто хочу, чтобы он работал раньше Я убираю его.)

GUI класс:

import javax.swing.*;
import java.awt.event.*;
import java.io.*;
public class Login_GUI implements ActionListener {


private static JLabel userL;
private static JTextField userT;
private static JLabel pwL;
private static JPasswordField pwT;
private static JLabel respL;
private static JFrame f; 
public static boolean authorized;
public static void GUIfunc(){
    JPanel p = new JPanel();
    f = new JFrame("RMT 1.0");
    f.setSize(250, 225);
    f.setLocation(1080,530);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    f.add(p);

    userL = new JLabel("Username:");
    userL.setBounds(10,20,80,25);
    p.add(userL);
    userT = new JTextField(20);
    userT.setBounds(100,20,165,25);
    p.add(userT);

    pwL = new JLabel("Password:");
    pwL.setBounds(10,50,80,25);
    p.add(pwL);
    pwT = new JPasswordField(20);
    pwT.setBounds(100,50,165,25);
    p.add(pwT);

    JButton logB = new JButton("Login");
    logB.setBounds(10,80,80,25);
    logB.addActionListener(new Login_GUI());
    p.add(logB);

    respL = new JLabel("Incorrect username or password.");
    respL.setBounds(10,100,80,25);
    respL.setEnabled(false);
    p.add(respL);

}
@Override
    public void actionPerformed(ActionEvent e){
    while (authorized != true){
        String u = userT.getText();
        String pw = pwT.getText();
        try {
            authorized = Login2.loginfunc(u,pw);
        }
        catch(IOException exc){
            exc.printStackTrace();
        }
        logB.setSelected(false);

    }
    f.dispatchEvent(new WindowEvent(f, WindowEvent.WINDOW_CLOSING));

}
}

Класс входа:

import java.util.*;
import java.io.*;
import java.nio.*;

class Login2{
public static boolean loginfunc(String u, String pw)throws IOException{
    File users = new File("C:\\Users\\Marcell\\OneDrive\\Computer Science\\IA\\users.txt");
    Scanner kb = new Scanner (System.in);
    Scanner sc = new Scanner (users);

    String token1 = "";
    int numOfEmp = 3;
    boolean authorized = false;
    boolean repeat = true;  
    String temp[] = new String[numOfEmp];

    for(int x=0;x<numOfEmp;x++){         
       token1 = sc.nextLine();
       temp[x] = token1;
    }


    String full = u + "," + pw;
    for (int x=0;x<numOfEmp;x++ ){
        String pass = temp[x];
        if (pass.equals(full)){
             System.out.println("Login successful.");
             authorized = true;
             repeat = false;
            }              
    }
    if (repeat = false){
        return(false);
    }

    return(authorized);
}
}

Спасибо за помощь заранее!

1 Ответ

0 голосов
/ 18 февраля 2020

Заменить actionPerformed следующим образом:

public void actionPerformed(ActionEvent e){
    if (!authorized){
        String u = userT.getText();
        String pw = pwT.getText();
        try {
            authorized = Login2.loginfunc(u,pw);
            if(authorized) {
                f.dispatchEvent(new WindowEvent(f, WindowEvent.WINDOW_CLOSING));
            }
        }
        catch(IOException exc){
            exc.printStackTrace();
        }
        logB.setSelected(false);
    }       
}
...