2016-09-27 76 views
0

我想验证我的其他JTextField使用InputVerifier方法。我做了什么,我使用setName设置了一个不同的JTextFieldgetName方法无法验证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

弗朗西斯,如果你调试你的代码,并去到你认为你的问题是什么是文本的价值和在关键情况下名称的价值是什么? –

回答

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 
      } 
     } 
}