Проблема чтения строки JavaFX TextArea - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь создать систему входа в систему в JavaFX, и мне нужно проверить, чтобы строка для textArea, соответствующая электронной почте, совпадала с переменной электронной почты в моем классе User. Однако метод, который я использую для сравнения строки в textArea с пользовательскими данными, всегда возвращает false. Я не уверен почему. Я пробовал .equals (), .compareTo, даже .charAt () и протестировал его с 1 буквой, и он все равно вернул бы false.

Вот мой код для метода. Обратите внимание, что это метод, который я использую для сравнения строки в textArea со строкой в ​​User.getEmail.

public boolean checkCredentials()
    {
        return text1.getText().equals(user.getEmail());
    }

А вот мой код для метода .getEmail () в моем классе User:

private String email = "1";
public String getEmail()
{
    return email;
}

Кроме того, даже запустив это с вводом в textArea как "1" и строкой Email в моем пользовательском классе как "1", я все равно получаю ложное возвращение:

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();
    }

}

1 Ответ

0 голосов
/ 02 февраля 2020

Текущий метод, опубликованный выше, всегда будет возвращать значение 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");
                }
            }
        });

Этот метод сравнивает строки при нажатии кнопки и переходит к scene2, когда они идентичны.

PS AlertBox - это класс, созданный мной вместе с display ().

...