1

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

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。如果需要,我可以提供更多代码。

4

1 回答 1

4

这个说法有两个问题:

if (regAccConfEmailField.getText() == regAccEmail.getText() && regAccConfEmail != null)
  • 您应该null首先进行检查,以便它短路表达式 if regAccConfEmailisnull
  • 也用于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于执行验证的 a。看看使用DocumentListener来触发对文档更改的验证。
于 2012-12-29T00:05:35.330 回答