JavaFX: если условие forTextField не работает должным образом на ActionEvent? - PullRequest
0 голосов
/ 15 января 2019

У меня есть кусок кода, форма входа в JavaFX. Это всего лишь прототип, и он основан на учебнике, который не охватывает такую ​​тему. Я хочу добавить проверку TextField, я сделал это так:

Button btn = new Button("Login");
HBox hBtn = new HBox(10);
hBtn.setAlignment(Pos.BOTTOM_RIGHT);
hBtn.getChildren().add(btn);
grid.add(hBtn, 1, 4);

final Text actiontarget = new Text();
grid.add(actiontarget, 1, 6);

if (userTextField.getText().trim().isEmpty() && !pwField.getText().trim().isEmpty()) {
    btn.setOnAction(event
                -> {
        actiontarget.setFill(Color.FIREBRICK);
        actiontarget.setText("No login provided!");
    });
} else if (pwField.getText().trim().isEmpty() && !userTextField.getText().trim().isEmpty()) {
    btn.setOnAction(event
            -> {
        actiontarget.setFill(Color.FIREBRICK);
        actiontarget.setText("Please provide a password!");
    });
} else if (userTextField.getText().trim().isEmpty() && pwField.getText().trim().isEmpty()) {
    btn.setOnAction(event
            -> {
        actiontarget.setFill(Color.FIREBRICK);
        actiontarget.setText("Please provide login and password!");
    });
} else {
    btn.setOnAction(event
            -> {
        actiontarget.setFill(Color.GREEN);
        actiontarget.setText("Login succesfull");
    });
}

Проблема в том, что этот код ВСЕГДА возвращает текст из 3-го условия: Please provide login and password!, ввод в эти поля не имеет значения. Я могу предоставить только пароль, только логин, оба или ни один из двух, результат всегда будет одинаковым.

Я что-то здесь упускаю? Это (очень) неправильный подход? Или я просто устал и должен идти спать?

ура!

1 Ответ

0 голосов
/ 15 января 2019

if/else if оценивается во время создания GUI.

Это означает, что проверка выполняется для значений, которые вы инициализировали TextField s (или значения по умолчанию).

Переместите чек в обработчик событий, чтобы проверять значения во время нажатия кнопки:

...
grid.add(actiontarget, 1, 6);

btn.setOnAction(evt -> {
    String user = userTextField.getText().trim();
    String password = pwField.getText().trim();

    if (!(user.isEmpty() || password.isEmpty())) {
        actiontarget.setFill(Color.GREEN);
        actiontarget.setText("Login succesfull");
    } else {
        actiontarget.setFill(Color.FIREBRICK);
        if (user.isEmpty()) {
            actiontarget.setText(password.isEmpty() ? "Please provide login and password!" : "No login provided!");
        } else {
            actiontarget.setText("Please provide a password!");
        }
    }
});
...