JavaFXTextArea字符串读取问题
我试图在JavaFX中创建一个登录系统,我需要检查与电子邮件对应的textArea字符串是否与我的用户类中的email变量相同。但是,我用于将textArea中的字符串与用户详细信息进行比较的方法将始终返回false。我不知道为什么。我尝试了.equals(),.compareTo,甚至.charAt(),并用1个字母对其进行了测试,结果仍然返回false 这是我的方法代码。请注意,这是我用于将textArea中的字符串与User.getEmail中的字符串进行比较的方法JavaFXTextArea字符串读取问题,java,javafx,textarea,Java,Javafx,Textarea,我试图在JavaFX中创建一个登录系统,我需要检查与电子邮件对应的textArea字符串是否与我的用户类中的email变量相同。但是,我用于将textArea中的字符串与用户详细信息进行比较的方法将始终返回false。我不知道为什么。我尝试了.equals(),.compareTo,甚至.charAt(),并用1个字母对其进行了测试,结果仍然返回false 这是我的方法代码。请注意,这是我用于将textArea中的字符串与User.getEmail中的字符串进行比较的方法 public bool
public boolean checkCredentials()
{
return text1.getText().equals(user.getEmail());
}
下面是我的用户类中.getEmail()方法的代码:
private String email = "1";
public String getEmail()
{
return email;
}
此外,即使在文本区域中的输入为“1”,在我的用户类中的字符串Email为“1”的情况下运行此操作,我仍然会得到一个返回false:
public boolean checkCredentials()
{
return text1.getText().length() == user.getEmail().length();
}
我的猜测是,textArea中的字符串比User类中的字符串有一些“额外”的内容。我试着打印出两个字符串的长度,得到了相同的答案
重新创建所需的最低代码,注意必须安装JavaFX,并且必须使用JavaFX应用程序模板:
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application
{
Stage window;
Scene scene1;
String sEmail;
// TextBoxes Dec.
TextArea text1 = new TextArea();
public static void main(String[] args)
{
launch(args);
}
public boolean checkCredentials()
{
return text1.getText().equals(sEmail);
}
@Override
public void start(Stage primaryStage)
{
window = primaryStage;
sEmail = "1";
// TextBoxes Ini.
text1.setMaxWidth(200);
text1.setMaxHeight(25);
text1.setMinHeight(25);
// Button
Button button1 = new Button("Check string");
if(checkCredentials())
{
button1.setOnAction(e -> System.out.println("The email is correct"));
}
else
{
button1.setOnAction(e -> System.out.println("The email is NOT correct"));
}
// Layout1
VBox layout1 = new VBox(20);
layout1.setAlignment(Pos.CENTER);
layout1.getChildren().add(text1, button1);
scene1 = new Scene(layout1, 750, 500);
window.setScene(scene1);
window.setTitle("Hello");
window.show();
}
}
上面发布的当前方法将始终返回false,除非与比较的字符串为空。这是因为检查是在程序运行时进行的,这意味着在程序开始时文本区域中始终没有任何内容 要解决此问题,请为按钮创建一个EventHandler,如下所示:
button1.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent event)
{
if(text1.getText().equals(user.getEmail()))
{
window.setScene(scene2);
}
else
{
AlertBox.display("ALERT!", "Please provide correct details");
}
}
});
button1.setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(ActionEvent事件)
{
if(text1.getText().equals(user.getEmail()))
{
窗口设置场景(场景2);
}
其他的
{
显示(“警报!”,“请提供正确的详细信息”);
}
}
});
此方法在按下按钮时比较字符串,在相同时转到场景2
p.S AlertBox是我与display()一起创建的类。在返回布尔值之前,请尝试打印每个文本1和用户的内容和长度。无法根据您提供的信息确定问题。看起来您使用了错误的输入进行读取,但我们无法确定。但是,您可以简单地设置一个断点并调试它。然而,我们需要一个我已经试过打印text1和user.getEmail的输出,但是它们打印的是相同的东西。对于exmaple,我做了:button1.setOnAction(e->System.out.println(text1.getText+“\n”+user.getEmail)),它会打印:11在实例化时,textArea的文本是空的-那时,检查总是假的。现在,根据该检查向按钮注册不同的actionHandler。您(很可能)想要做的是检查-单个、无条件注册-按钮的onAction Handler中的凭据谢谢,现在我看到问题了。检查将始终返回false,因为检查在开始时就完成了,而此时文本区域中没有任何内容。