非常奇怪的摆动错误

时间:2012-12-29 00:00:47

标签: java swing

我正在为我制作的游戏编写登录脚本。我目前正在检查所提供的信息以确保其有效。我遇到的问题是,当我去检查两个文本字段是否具有相同的值时。当他们这样做时,他们会做我想做的事情。

private void regAccConfEmailFieldFocusFocusLost(FocusEvent event) {
    if(regAccConfEmailField.getText() == regAccEmail.getText() && regAccConfEmail != null)
    {
        regAccConfEmailField.setBorder(new LineBorder(Color.green, 1, false));
        confEmail = true;
    }
    else
    {
        regAccConfEmailField.setBorder(new LineBorder(Color.red, 1, false));
        confEmail = false;
    }
}

private void regAccConfSecQFieldFocusFocusLost(FocusEvent event) {
    if(regAccConfSecQField.getText() == null)
    {
        regAccConfSecQField.setBorder(new LineBorder(Color.red, 1, false));
        secQuestion = false;
    }
    else
    {
        regAccConfSecQField.setBorder(new LineBorder(Color.green, 1, false));
        secQuestion = true;
    }
}  

这是我拥有的代码,我需要知道为什么这些方法都与给出的方法相反。

假设regAccConfEmailField和regAccEmailField都等于hello@gmail.com 它将转到if语句而不是else。如果需要,我可以提供更多代码。

1 个答案:

答案 0 :(得分:4)

此声明有两个问题:

if (regAccConfEmailField.getText() == regAccEmail.getText() && regAccConfEmail != null)
  • 如果nullregAccConfEmail
  • ,您应先进行null检查,以便将表达式短路
  • 还可以使用String.equals来比较String内容而不是==运算符。 ==运算符用于比较对象引用,并且当前为您提供了与您想要的相反,因为2个字段中的值将是不同的String个对象。

您可以替换为

if (regAccConfEmail != null && regAccConfEmailField.getText().equals(regAccEmail.getText()))
  • 同样regAccConfSecQField.getText()永远不能null来自JTextField所以替换

    if(regAccConfSecQField.getText()== null)

  if (regAccConfSecQField.getText().trim().isEmpty())
  • 最后,您似乎正在使用依赖FocusListener执行验证的FocusEvents。请查看使用DocumentListener来触发对文档更改的验证。