2016-09-27 9 views
0

メソッドを使用して他のJTextFieldを確認したかったのですが、私は何をsetNameを使って異なるJTextFieldの名前を付けましたか?getNameメソッドは他のクラスからJTextFieldを検証できません

private void validateJTextField() 
{ 
    tfAddress.setName("tfAddress"); 
    tfLastName.setInputVerifier(new Validation()); 
    tfFirstName.setInputVerifier(new Validation()); 
    tfMiddleName.setInputVerifier(new Validation()); 
    tfNickname.setInputVerifier(new Validation()); 
    tfAddress.setInputVerifier(new Validation()); 
} 

検証クラス

public class Validation extends InputVerifier 
{ 
@Override 
public boolean verify(JComponent input) 
{ 

    String text = null; 
    String name = input.getName(); 
    if(input instanceof JTextField) 
    { 
     text = ((JTextField) input).getText(); 
     if(text.trim().length() == 0 || text.equals("")) 
     { 
      JOptionPane.showMessageDialog(null, "Cannot left blank"); 
      return false;//Return false if the component need to keep focus 
     } 

     else 
     { 
      try 
      { 
       Double.parseDouble(text); 
       JOptionPane.showMessageDialog(null, "Cannot insert numeric"); 
       return false; 
      } 
      catch(NumberFormatException e) 
      { 

      } 
     } 

    if(text.equals("") && name.equals("tfAddress")) 
    { 
     System.out.print("This is tfAddress"); 
     return false; 
    } 

    } 

    return true;//Return true if the component should give up focus 
} 
} 

私はname文字列があるかどうかを検証またはチェックしようとしているここに見ることができるように"tfAddress"に等しいが、残念ながらそれは条件を満たしていないだろう。どのように私はこれを解決することができますヒントまたはヒント?

+0

あなたのコードで達成したい論理は何ですか?どのようにテストしましたか、コントロールのテキストは何ですか? validateJTextFieldが呼び出されましたか?もしそうなら、どこでどのように? –

+0

@ LajosArpad Arpad 'JTextFields'が' 'tfAddress''と等しいかどうかを検証するには、それが真であれば数値と文字を受け入れることができます。はい、 'validateJTextField'がコンストラクタで呼び出されました。 – Francisunoxx

+0

Francis、あなたのコードをデバッグし、あなたの問題がテキストの価値であると思う行に行き、クリティカルなケースでは名前の値は何ですか? –

答えて

0

if(text.equals("") && name.equals("tfAddress"))if(text.trim().length() == 0 || text.equals(""))チェックのためにこの文を実行しませんので、text.equals("")は決してtrueを返さないので、name.equals("tfAddress")はスキップします。

if句の最初のチェックでは、テキストが空の場合はコードが返されます。だからここでif(text.equals("") && name.equals("tfAddress"))を確認することができますif(name.equals("tfAddress"))

+0

私はすでにあなたのソリューションを試してみました。私は 'if(name.equals(" tfAddress "))'を使ってチェックしましたが、この行に 'NullPointerException'を返します。 – Francisunoxx

+0

name!= null && name.equals().... –

+0

の場合、無効であることを確認できます。エラーはなくなりました。しかし、それはまだ私のロジックの最初の条件を満たしています。 – Francisunoxx

0

私はただ問題を解決しました。私はその論理について間違いを犯しました。私はtext.trim().length() == 0 || text.equals("")に基づいているので、プログラムが実行されるときまずテキストが空であるかどうかをチェックします。私は何をしたのですかsetNameメソッドに基づいて条件を設定しました。これを望むことは他人に役立つでしょう。

private void validateJTextField() 
{ 
    tfLastName.setName("tfLastName"); 
    tfFirstName.setName("tfFirstName"); 
    tfMiddleName.setName("tfMiddleName"); 
    tfNickname.setName("tfNickname"); 
    tfAddress.setName("tfAddress"); 
    tfContact.setName("tfContact"); 
    tfLastName.setInputVerifier(new Validation()); 
    tfFirstName.setInputVerifier(new Validation()); 
    tfMiddleName.setInputVerifier(new Validation()); 
    tfNickname.setInputVerifier(new Validation()); 
    tfAddress.setInputVerifier(new Validation()); 
    tfContact.setInputVerifier(new Validation()); 
} 

public class Validation extends InputVerifier 
{ 
@Override 
public boolean verify(JComponent input) 
{ 
    String text = null; 
    String cb = null; 
    String name = input.getName(); 
    if(input instanceof JTextField) 
    { 
     text = ((JTextField) input).getText(); 

     if(name.equals("tfLastName") || name.equals("tfFirstName") || name.equals("tfMiddleName") || name.equals("tfNickname")) 
     { 
      if(text.trim().length() == 0 || text.equals("")) 
      { 
       JOptionPane.showMessageDialog(null, "Cannot left blank"); 
       return false;//Return false if the component need to keep focus 
      } 
      else 
      { 
       try 
       { 
        Double.parseDouble(text); 
        JOptionPane.showMessageDialog(null, "Cannot insert numeric"); 
        return false; 
       } 
       catch(NumberFormatException e) 
       { 

       } 
      } 
     } 
     else if(name.equals("tfAddress")) 
     { 
      if(text.trim().length() == 0 || text.equals("")) 
      { 
       JOptionPane.showMessageDialog(null, "Cannot left blank"); 
       return false;//Return false if the component need to keep focus 
      } 
     } 
} 
関連する問題