JavaFXTextArea字符串读取问题

JavaFXTextArea字符串读取问题,java,javafx,textarea,Java,Javafx,Textarea,我试图在JavaFX中创建一个登录系统,我需要检查与电子邮件对应的textArea字符串是否与我的用户类中的email变量相同。但是,我用于将textArea中的字符串与用户详细信息进行比较的方法将始终返回false。我不知道为什么。我尝试了.equals(),.compareTo,甚至.charAt(),并用1个字母对其进行了测试,结果仍然返回false 这是我的方法代码。请注意,这是我用于将textArea中的字符串与User.getEmail中的字符串进行比较的方法 public bool

我试图在JavaFX中创建一个登录系统,我需要检查与电子邮件对应的textArea字符串是否与我的用户类中的email变量相同。但是,我用于将textArea中的字符串与用户详细信息进行比较的方法将始终返回false。我不知道为什么。我尝试了.equals(),.compareTo,甚至.charAt(),并用1个字母对其进行了测试,结果仍然返回false

这是我的方法代码。请注意,这是我用于将textArea中的字符串与User.getEmail中的字符串进行比较的方法

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,因为检查在开始时就完成了,而此时文本区域中没有任何内容。