2016-11-28 37 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は、私はそれに、ユーザがそれに情報を入力せずにTextFieldを左たびに値を追加しています、整数です。

私はプログラムをデバッグするたびに、この検証行でNullPointerExceptionに直面しています。

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

問題はどこにあり、どのように修正するのですか?

ありがとうございました!

+0

if-statementの 'tfBookISBN'は、フィールドの作成時に同じオブジェクト参照ですか?上記のコードのスコープは何ですか?グローバルtfBookISBNがありますか?方法の中のもう一つ?つまり、より多くのコードを投稿してください:) – Yazan

+0

@ Yazan tfBookISBNはグローバルでプライベートなので、私は同じメソッドで宣言し、同じクラスの別のメソッドでそれにアクセスします。 – Helvijs

+0

@ Yazanは両方のメソッドからすべてのコードを追加しました。 – Helvijs

答えて

1

あなたはコトcomments- -asあなたのクラスで

private JTextField tfBookISBN = new JTextField();

グローバルスコープを持っている場合は、DrawBookAttributes()

からその行

JTextField tfBookISBN = new JTextField();

を削除する必要がありますそれが宣言で初期化されていない(私はそうではないと思う)場合には、 DrawBookAttributes()が、初期化などでその行は、以下のように、宣言していない:

tfBookISBN = new JTextField();

あなたはNPEを作成するグローバルな初期化されていないの方法で新しいフィールドを作成し、そして去っているので、ときEntryCheck()試行へそのオブジェクトにアクセスしてgetText()を呼び出します。

関連する問題