我正在为我制作的游戏编写登录脚本。我目前正在检查所提供的信息以确保其有效。我遇到的问题是,当我去检查两个文本字段是否具有相同的值时。当他们这样做时,他们会做我想做的事情。
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。如果需要,我可以提供更多代码。
答案 0 :(得分:4)
此声明有两个问题:
if (regAccConfEmailField.getText() == regAccEmail.getText() && regAccConfEmail != null)
null
为regAccConfEmail
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来触发对文档更改的验证。