2016-11-28 2 views
1

모든 TextField에 값이없는 경우 사용자가 진행 상황을 저장할 수 없도록하려면 유효성 검사를 위해 JTextField의 값을 비교하려고합니다.Java, JTextField .equals

이것은 내 텍스트 필드 필드입니다.

public void DrawBookAttributes() { 
    lblBookName = new JLabel("Book Name :"); 
    lblBookName.setFont(getLblFont()); 
    lblBookName.setSize(140, 20); 
    lblBookName.setLocation(280, 150); 
    menuFrame.add(lblBookName); 

    tfBookName = new JTextField(); 
    tfBookName.setSize(140, 20); 
    tfBookName.setLocation(420, 150); 
    menuFrame.add(tfBookName); 

    lblBookID = new JLabel("Book ID :"); 
    lblBookID.setFont(getLblFont()); 
    lblBookID.setSize(140, 20); 
    lblBookID.setLocation(280, 50); 
    menuFrame.add(lblBookID); 

    tfBookID = new JTextField(); 
    tfBookID.setSize(140, 20); 
    tfBookID.setLocation(420, 50); 
    tfBookID.setText("hello"); 
    tfBookID.setEditable(false); 
    menuFrame.add(tfBookID); 

    JLabel lblBookCost = new JLabel("Cost (£) :"); 
    lblBookCost.setFont(getLblFont()); 
    lblBookCost.setSize(140, 20); 
    lblBookCost.setLocation(280, 200); 
    menuFrame.add(lblBookCost); 

    tfBookCost = new JTextField(); 
    tfBookCost.setSize(140, 20); 
    tfBookCost.setLocation(420, 200); 
    tfBookCost.addKeyListener(this); 
    menuFrame.add(tfBookCost); 

    lblBookYearOfPublication = new JLabel("Publication Date :"); 
    lblBookYearOfPublication.setSize(140, 20); 
    lblBookYearOfPublication.setLocation(280, 250); 
    lblBookYearOfPublication.setFont(getLblFont()); 
    menuFrame.add(lblBookYearOfPublication); 

    JTextField tfBookYearOfPublication = new JTextField(); 
    tfBookYearOfPublication.setSize(140, 20); 
    tfBookYearOfPublication.setLocation(420, 250); 
    tfBookYearOfPublication.setText("DD-MM-YYYY"); 
    tfBookYearOfPublication.addActionListener(this); 
    menuFrame.add(tfBookYearOfPublication); 

    JLabel lblbookPublishngHouse = new JLabel("Publishing Orgaisation :"); 
    lblbookPublishngHouse.setSize(140, 20); 
    lblbookPublishngHouse.setLocation(280, 300); 
    lblbookPublishngHouse.setFont(getLblFont()); 
    menuFrame.add(lblbookPublishngHouse); 

    JTextField tfBookPublishingHouse = new JTextField(); 
    tfBookPublishingHouse.setSize(140, 20); 
    tfBookPublishingHouse.setLocation(420, 300); 
    menuFrame.add(tfBookPublishingHouse); 

    JLabel lblBookISBN = new JLabel("ISBN :"); 
    lblBookISBN.setSize(140, 20); 
    lblBookISBN.setLocation(280, 350); 
    lblBookISBN.setFont(getLblFont()); 
    menuFrame.add(lblBookISBN); 

    JTextField tfBookISBN = new JTextField(); 
    tfBookISBN.setSize(140, 20); 
    tfBookISBN.setLocation(420, 350); 
    menuFrame.add(tfBookISBN); 

    JLabel lblBookPages = new JLabel("Number of Pages :"); 
    lblBookPages.setSize(140, 20); 
    lblBookPages.setLocation(280, 400); 
    lblBookPages.setFont(getLblFont()); 
    menuFrame.add(lblBookPages); 

    JTextField tfBookPages = new JTextField(); 
    tfBookPages.setSize(140, 20); 
    tfBookPages.setLocation(420, 400); 
    menuFrame.add(tfBookPages); 

    menuFrame.setVisible(true); 
} 

는이 유효성 검사 부분

public void EntryCheck() { 

     if (tfBookName.getText().equals("")) { 
      EntryChecker++; 
      System.out.println(EntryChecker); 
     } 
     if (tfBookISBN.getText().equals("")) { 
      EntryChecker++; 
     } 
     if (tfBookCost.getText().equals("")) { 
      EntryChecker++; 
     } 
     if (tfBookPages.getText().equals("")) { 
      EntryChecker++; 
     } 
     if (tfBookPublishingHouse.getText().equals("")) { 
      EntryChecker++; 
     } 
     if (tfBookYearOfPublication.getText().equals("")) { 
      EntryChecker++; 
     } 
     if (tfBookCost.getText().equals("DD-MM-YYY")) { 
      EntryChecker++; 
     } 
     System.out.println(EntryChecker); 
} 

EntryChecker는 정수, 나는 그것을 사용자가 정보를 입력하지 않고 텍스트 필드를 왼쪽 때마다 값을 추가하고이다.

프로그램을 디버깅 할 때마다이 유효성 검사 줄에서 NullPointerException이 발생합니다.

if (tfBookISBN.getText().equals("")) { 
     EntryChecker++; 

아무도 아이디어가 있으며 문제를 해결하는 방법은 무엇입니까?

감사합니다.

+0

if 문에서 'tfBookISBN'이 필드 생성시 동일한 객체 참조인지 확인 하시겠습니까? 위 코드의 범위는 무엇입니까? 그렇다면 글로벌 tfBookISBN이 있습니까? 그리고 다른 하나는 방법 안에 있습니까? ie more code : – Yazan

+0

@ Yazan tfBookISBN은 글로벌이고 private입니다. 한 가지 방법으로 선언하고 같은 클래스의 다른 클래스에서 액세스하려고합니다. – Helvijs

+0

@ Yazan 요청한대로 Both Methods의 모든 코드가 추가되었습니다. – Helvijs

답변

1

당신이 선생님 의견 - -as 당신이 당신의 클래스

private JTextField tfBookISBN = new JTextField();

글로벌 범위가있는 경우에, 당신은 DrawBookAttributes()

에서 해당 라인

JTextField tfBookISBN = new JTextField();

를 제거해야 만약 초기화되지 않았다면 (나는 생각하지 않는다.) 선언문에서 DrawBookAttributes()하지만, 초기화 등의의 해당 라인은 아래와 같이 선언하지 :

tfBookISBN = new JTextField();

당신이 NPE를 생성하는 글로벌 한 초기화를하는 방법에 새 필드를 생성하고 떠나 있기 때문에 때 EntryCheck() 시도에 해당 개체에 액세스하여 getText()을 호출하십시오.