2014-09-08 5 views
2

사용자 이름과 암호를 확인하는 GUI가 있습니다. 과제의 다른 부분은 사용자 이름과 비밀번호가 들어있는 파일을 읽고 사용자가 텍스트 필드에 입력 한 내용과 일치하는지 확인하는 것입니다. 일치하면 로그인 페이지가 숨겨지고 다른 페이지에 "환영"메시지가 나타납니다. 나는 텍스트 파일에 대한 경험이 없다. 그 코드 블록은 어디에 두어야 할까? 나는 그것이 ActionListener 메소드와 main 메소드가 아니라고 가정하지만 나는 방황하고있다. 나는 단지 올바른 방향으로 약간의 밀기 만하면됩니다. 여기까지 내가 지금까지 가지고있는 것이있다. 어떤 도움이라도 대단히 감사하겠습니다. 감사!GUI에서 텍스트 파일 읽기

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.*; 
import javax.swing.*; 
import java.io.*; 
/** 
*/ 
public class PassWordFrame extends JFrame 
{ 
    private static final int FIELD_WIDTH = 10; 
    private static final int FRAME_WIDTH = 500; 
    private static final int FRAME_HEIGHT = 300; 
    private JLabel fileRead; 
    private JLabel instruct; 
    private JLabel username; 
    private JLabel password; 
    private JTextField usertext; 
    private JTextField passtext; 
    private JButton login; 
    private ActionListener listener; 
    //String text = ""; 

    public PassWordFrame() 
    { 
     createComponents(); 
     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     listener = new ClickListener(); 
    } 
    class ClickListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      String inputFileName = ("users.txt"); 
      File userFile = new File(inputFileName); 

     } 
    } 
    public void createComponents() 
    { 
     Color blue = new Color(0,128,155); 
     Font font = new Font("Times New Roman", Font.BOLD, 14); 

     instruct = new JLabel("Please enter your username and password."); 
     instruct.setFont(font); 

     username = new JLabel("Username: "); 
     username.setFont(font); 

     password = new JLabel("Password: "); 
     password.setFont(font); 

     usertext = new JTextField(FIELD_WIDTH); 
     passtext = new JTextField(FIELD_WIDTH); 

     login = new JButton("Login"); 
     login.setFont(font); 

     instruct.setForeground(Color.BLACK); 
     login.setForeground(Color.BLACK); 
     username.setForeground(Color.BLACK); 
     password.setForeground(Color.BLACK); 

     login.addActionListener(listener); 

     JPanel panel1 = new JPanel(); 
     JPanel panel2 = new JPanel(); 
     JPanel panel3 = new JPanel(); 
     JPanel panel4 = new JPanel(); 

     panel1.setBackground(blue); 
     panel2.setBackground(blue); 
     panel3.setBackground(blue); 
     panel4.setBackground(blue); 

     panel1.add(instruct); 
     panel2.add(username); 
     panel2.add(usertext); 
     panel3.add(password); 
     panel3.add(passtext); 
     panel4.add(login); 

     add(panel1, BorderLayout.NORTH); 
     add(panel2, BorderLayout.WEST); 
     add(panel3, BorderLayout.CENTER); 
     add(panel4, BorderLayout.SOUTH); 

     pack(); 
    } 
}  

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

/** 

*/ 
public class PassWordFrameViewer 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new PassWordFrame(); 
     frame.setTitle("Password Verification"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

    } 
}  
+3

* "나는 그는 ActionListener 메소드 "* - 좋은 시작이 될 것입니다. 자세한 내용은 [Basic I/O] (http://docs.oracle.com/javase/tutorial/essential/io/)를 참조하십시오. – MadProgrammer

답변

1

g 드라이버에 password.txt라는 텍스트 파일이 있고 @ 기호로 구분 된 사용자 이름과 비밀번호가 있다고 가정합니다. 다음과 같은

[email protected] 

예제 코드

당신이 #createComponents() 메서드를 호출 한 후 리스너 ( listener = new ClickListener()를) 초기화 모든
package homework; 
import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.*; 
import javax.swing.*; 
import java.io.*; 

public class PassWordFrame extends JFrame 
{ 
    private static final int FIELD_WIDTH = 10; 
    private static final int FRAME_WIDTH = 500; 
    private static final int FRAME_HEIGHT = 300; 
    private JLabel fileRead; 
    private JLabel instruct; 
    private JLabel username; 
    private JLabel password; 
    private JTextField usertext; 
    private JTextField passtext; 
    private JButton login; 
    private ActionListener listener; 
    //String text = ""; 

    public PassWordFrame() 
    { 
     createComponents(); 
     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     login.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) 
      { 
       //Execute when button is pressed 
       String info = ReadFile(); 
       System.out.println(info); 
       String[] split = info.split("@"); 
       String uname=split[0]; 
       String pass =split[1]; 
       if(usertext.getText().equals(uname) && passtext.getText().equals(pass)){ 
        instruct.setText("access granted"); 
       }else{ 
        instruct.setText("access denided"); 
       } 
      } 
     }); 

    } 
    private static String ReadFile(){ 
     String line=null; 
     String text=""; 
     try{ 

      FileReader filereader=new FileReader(new File("G:\\password.txt")); 
      //FileReader filereader=new FileReader(new File(path)); 
      BufferedReader bf=new BufferedReader(filereader); 
      while((line=bf.readLine()) !=null){ 
       text=text+line; 

      } 
      bf.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return text; 

    } 


    public void createComponents() 
    { 
     Color blue = new Color(0,128,155); 
     Font font = new Font("Times New Roman", Font.BOLD, 14); 

     instruct = new JLabel("Please enter your username and password."); 
     instruct.setFont(font); 

     username = new JLabel("Username: "); 
     username.setFont(font); 

     password = new JLabel("Password: "); 
     password.setFont(font); 

     usertext = new JTextField(FIELD_WIDTH); 
     passtext = new JTextField(FIELD_WIDTH); 

     login = new JButton("Login"); 
     login.setFont(font); 

     instruct.setForeground(Color.BLACK); 
     login.setForeground(Color.BLACK); 
     username.setForeground(Color.BLACK); 
     password.setForeground(Color.BLACK); 

     login.addActionListener(listener); 

     JPanel panel1 = new JPanel(); 
     JPanel panel2 = new JPanel(); 
     JPanel panel3 = new JPanel(); 
     JPanel panel4 = new JPanel(); 

     panel1.setBackground(blue); 
     panel2.setBackground(blue); 
     panel3.setBackground(blue); 
     panel4.setBackground(blue); 

     panel1.add(instruct); 
     panel2.add(username); 
     panel2.add(usertext); 
     panel3.add(password); 
     panel3.add(passtext); 
     panel4.add(login); 

     add(panel1, BorderLayout.NORTH); 
     add(panel2, BorderLayout.WEST); 
     add(panel3, BorderLayout.CENTER); 
     add(panel4, BorderLayout.SOUTH); 

     pack(); 
    } 
}  
+1

고맙습니다. 많은! 도움에 정말 감사드립니다. 나는 단지 복사하고 붙여 넣기 만하지는 않았지만 파일 판독기가 어떻게 작동하고 그것을 훨씬 더 많이 이해하는지 배웠습니다. 다시 한 번 감사드립니다! – Dustin

+0

행운을 빕니다 ..... –

2

우선 그래서 이것은 당신이 로그인에 null 리스너를 추가 의미 단추. 그래서 생성자는 다음과 같아야합니다

public PassWordFrame() { 
     listener = new ClickListener(); 
     createComponents(); 
     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    } 

를 그런 다음, 환영 메시지와 함께 GUI를 변경하려면 때문에, 당신은 SwingWorker, 백그라운드 스레드에서 GUI 상호 작용 작업을 수행하도록 설계된 클래스를 사용해야합니다. javadoc에서는 멋진 예제를 찾을 수 있지만 여기에는 좋은 자습서 인 Worker Threads and SwingWorker도 있습니다.

나는 (스윙 노동자 사용) 당신만을 리스너 구현을 작성 아래 :

class ClickListener implements ActionListener { 
     public void actionPerformed(ActionEvent event) { 

     new SwingWorker<Boolean, Void>() { 

      @Override 
      protected Boolean doInBackground() throws Exception { 

      String inputFileName = ("users.txt"); 
      File userFile = new File(inputFileName); 

      BufferedReader reader = new BufferedReader(new FileReader(userFile)); 

      String user; 
      String pass; 

      try { 
       user = reader.readLine(); 
       pass = reader.readLine(); 
      } 

      catch (IOException e) { 

       // 
       // in case something is wrong with the file or his contents 
       // consider login failed 

       user = null; 
       pass = null; 

       // 
       // log the exception 

       e.printStackTrace(); 
      } 

      finally { 
       try { 
       reader.close(); 
       } catch (IOException e) { 
       // ignore, nothing to do any more 
       } 
      } 

      if (usertext.getText().equals(user) && passtext.getText().equals(pass)) { 
       return true; 
      } else { 
       return false; 
      } 
      } 

      @Override 
      protected void done() { 

      boolean match; 

      try { 
       match = get(); 
      } 

      // 
      // this is a learning example so 
      // mark as not matching 
      // and print exception to the standard error stream 

      catch (InterruptedException | ExecutionException e) { 
       match = false; 
       e.printStackTrace(); 
      } 

      if (match) { 
       // show another page with a "Welcome" message 
      } 
      } 
     }.execute(); 
     } 
    } 

는 또 다른 팁 : JFrame의 구성 요소를 추가, 그래서이 대체하지 않습니다

add(panel1, BorderLayout.NORTH); 
    add(panel2, BorderLayout.WEST); 
    add(panel3, BorderLayout.CENTER); 
    add(panel4, BorderLayout.SOUTH); 

:

JPanel contentPane = new JPanel(new BorderLayout()); 
    contentPane.add(panel1, BorderLayout.NORTH); 
    contentPane.add(panel2, BorderLayout.WEST); 
    contentPane.add(panel3, BorderLayout.CENTER); 
    contentPane.add(panel4, BorderLayout.SOUTH); 

    setContentPane(contentPane); 
+0

도와 주셔서 감사합니다! 파일 판독기가 작동하는 방식에 대해 많은 것을 배웠고 ContentPan에 대한 팁을 주셔서 감사합니다. – Dustin