2013-12-15 2 views
1

저는 코딩이 새로 생겼습니다. 인덱스 파일이 있는지 (패스워드 있음) 먼저 검사하여 저렴하고 쉬운 로그인 코드를 얻는 데 노력하고 있습니다. 그렇다면 말하는 내용을 읽고 사용자 이름과 암호를 묻는 것입니다. 파일이 없거나 비어있는 경우 사용자는 두 필드가 사용 된 후 색인 파일에 기록하도록 사용자에게 알려야합니다.변수가 JTextField에서 데이터를 가져 오지 않습니다

그러나 내가 실행 한 문제는 두 필드를 파일에 쓰도록 코드를 실행하도록 설정 한 단추가 문자열에서 아무 것도 찾지 못하고 아무 것도 쓸 수 없다는 것입니다. . 나는 아래 코드를 포함하고 잊어 버린 것이 있다면 더 추가 할 수있다.

아래는 GUI 윈도우와 액션 리스너를위한 코드입니다.

public class Login { 
private static String UserName;  //true username 
private static String Password;  //true password 
private static boolean accepted = false; 
private static String user=""; 
private static String pass=""; 
private static boolean firstTime = true; 

Login(){ 

} 

public static void CreateLogin(String user, String pass) throws IOException{ 
    UserName = user; 
    Password = pass; 

    try{ 
     FileWriter FW = new FileWriter("Index.txt"); 
     PrintWriter output = new PrintWriter(FW); 
     output.println(UserName); 
     output.println(Password); 
     output.close(); 
     FW.close(); 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

public static void LogIn(){ 
    try{ 
     FileReader FR = new FileReader("Index.txt"); 
     firstTime = false; 
     Scanner sc = new Scanner(FR); 
     user = sc.nextLine(); 
     pass = sc.nextLine(); 
     if(user.equalsIgnoreCase("")){ 
      firstTime = true; 
     } 
     if(pass.equals("")){ 
      firstTime = true; 
     } 
    } 

    catch(FileNotFoundException e){ 
     firstTime = true; 
    } 

    GUIComponents.LoginScreen(); 





} 

public static void passCheck(){ 
    if(UserName.equalsIgnoreCase(user)){ 
     if(Password.equals(pass)){ 
      accepted = true; 
     } 
    } 
    else{ 
     JOptionPane.showMessageDialog(null,"Your Username and Password do not /n match our files." 
       + "Please try again."); 
    } 
} 

public static boolean firstTimeCheck(){ 
    return firstTime; 
} 

}

사람이 내가에 무슨 짓을했는지 바보 같은 일을 알아낼 수있는 경우 :

public class GUIComponents extends JFrame{ 
public static String UserN = " "; 
public static String PassW = " "; 

public static void LoginScreen(){ 
    JFrame LoginFrame = new JFrame("Log in Menu"); 
    JPanel LoginInfo = new JPanel(); 
    JPanel LoginAttempt = new JPanel(); 

    JButton LoginOkay = new JButton("Log in"); 
    LoginListenerClass loginListen = new LoginListenerClass(); 
    LoginOkay.addActionListener(loginListen); 
    JButton LoginCancel = new JButton("Cancel"); 
    CancelListenerClass cancelListen = new CancelListenerClass(); 
    LoginCancel.addActionListener(cancelListen); 
    JLabel usern = new JLabel("Username:"); 
    JLabel passw = new JLabel("Password:"); 
    JTextField user = new JTextField(15); 
    JTextField pass = new JTextField(15); 
    LayoutManager LoginLayout = new GridLayout(2,2,5,10); 
    LayoutManager OkayCancel = new FlowLayout(); 
    LoginInfo.setLayout(LoginLayout); 
    LoginAttempt.setLayout(OkayCancel); 

    LoginInfo.add(usern); 
    LoginInfo.add(user); 
    LoginInfo.add(passw); 
    LoginInfo.add(pass); 
    LoginAttempt.add(LoginOkay); 
    LoginAttempt.add(LoginCancel); 

    if(Login.firstTimeCheck()==true){ 
     JOptionPane.showMessageDialog(null, "This is your first time using this program. \nPlease enter the Username" 
       + " and Password\n    you wish to set for all users."); 
    } 
    LoginFrame.add(LoginInfo, BorderLayout.CENTER); 
    LoginFrame.add(LoginAttempt, BorderLayout.SOUTH); 

    LoginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    LoginFrame.setLocationRelativeTo(null);       




    LoginFrame.pack(); 
    LoginFrame.setVisible(true); 

    UserN = user.getText(); 
    PassW = pass.getText(); 
} 

}이 아래

class LoginListenerClass implements ActionListener{ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(Login.firstTimeCheck()==false){ 
      Login.passCheck(); 
     } 
     else{ 
      try { 
       Login.CreateLogin(GUIComponents.UserN,  GUIComponents.PassW); 
       System.out.println(GUIComponents.UserN+" "+ GUIComponents.PassW); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 
    } 
} 

class CancelListenerClass implements ActionListener{ 
     @Override 
    public void actionPerformed(ActionEvent e){ 
     System.exit(0); 
    } 
} 

은 로그 함수에 대한 코드입니다 이 사건, 제게 알려주세요. 코드가 길어서 읽고 짜증나게하는 경우 사과드립니다. 여기에 코드에서

+1

코드를 줄이고 오류를 표시하고 관련 데이터 만 사용하십시오. – iWumbo

답변

2

: 당신은 GUI의 생성과 사용하기 전에 JTextField로에서 텍스트를 추출하려는

public static void LoginScreen(){ 
    // ............ code deleted to simplify things 

    JTextField user = new JTextField(15); 
    JTextField pass = new JTextField(15); 

    // ..... code removed to simplify things 

    LoginFrame.pack(); 
    LoginFrame.setVisible(true); 

    UserN = user.getText(); 
    PassW = pass.getText(); 
} 

그것으로 아무 것도 입력 할 수있는 기회를했다. 이 문제를 해결하려면 GUI 생성시 텍스트를 추출하지 말고 JButton을 눌렀을 때 활성화되는 JButton의 ActionListener 또는 Enter 키를 누르면 활성화 될 JTextFields의 ActionListener와 같은 이벤트로 인해 텍스트를 추출하지 마십시오 텍스트 필드에 포커스가있을 때 누름. AS를


옆으로, 코드는 총을 앓고 이상 사용 정적 수정의 당신이 진정한 OOP 클래스를 만드는 방법을 배우고 싶은 것을 제안하고, 자바 기초 전에 스윙 GUI 년대를 만들려고. 당신은 이것을 후회하지 않을 것입니다.

+0

+1 모든 덧글에 대해 배우고 Java 명명 규칙을 사용합니다. 변수 이름은 대문자로 시작하면 안됩니다. 내가 본 모든 책이나 튜토리얼은 규칙을 따르므로 자신 만의 책을 만들지 마십시오! – camickr

2

리스너 클래스 actionPerformed 메소드에서 UserN 및 PassW 값을 읽습니다. 그렇지 않으면 초기화시 빈 문자열 인 값을 읽는 중입니다.

2

변수는 텍스트 필드의 최신 값을받지 않습니다

public static String UserN = " "; 
public static String PassW = " "; 

을 정의했다.

제안 된 솔루션 (적합하지만 뭔가 코드에 대한되지 않음)

  1. GuiComponents 클래스로 Jtext 필드 정적 공개를 확인하여 LoginListener

    Login.CreateLogin(GUIComponents.user.getText(),GUIComponents.pass.getText()); 
    System.out.println(GUIComponents.user.getText() + GUIComponents.pass.getText()); 
    
    에서

    public static JTextField user;  
    public static JTextField pass; 
    

관련 문제