【问题标题】:getName method cannot verify JTextField from other classgetName 方法无法验证来自其他类的 JTextField
【发布时间】:2017-02-04 17:51:05
【问题描述】:

我想使用InputVerifier 方法验证我的另一个JTextField。我所做的我使用setName 为不同的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" 但不幸的是它不符合条件。有什么帮助或提示我该如何解决这个问题?

【问题讨论】:

  • 你想用你的代码实现什么逻辑?你是如何测试它的,控件的文本是什么?是否调用了 validateJTextField?如果是这样,在哪里以及如何?
  • @LajosArpad Arpad 我只是想验证JTextFields 是否等于"tfAddress",如果它是真的,它可以接受数字和字符。是的 validateJTextField 在构造函数上被调用。
  • 弗朗西斯,如果您调试代码并转到您认为问题在于 text 的值是什么以及在关键情况下 name 的值是什么的那一行?
  • @LajosArpad null 已经消失了。但不能满足我的条件。我不确定getName() 是否获得了正确的 JTextField。
  • 弗朗西斯,祝你好运。我将导航到操作员提供足够信息来解决他/她的问题的问题。

标签: java swing validation inputverifier


【解决方案1】:

我刚刚解决了这个问题。我在逻辑上犯了一个错误。我基于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
            }
        }
}

【讨论】:

    【解决方案2】:

    在您的代码中,此语句 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"))

    【讨论】:

    • 我已经在下面尝试了您的解决方案。我做了什么我使用if(name.equals("tfAddress")) 检查,但它在这条线上给了我一个NullPointerException
    • 错误消失了。但它仍然满足我逻辑中的第一个条件。
    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 2012-04-03
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多