JavaFX: Как управлять focusProperty между различными узлами? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть слушатель , присоединенный к моему полю studentIDText, который выбирает запись Student из базы данных. Однако я показываю сообщение об ошибке, если оставляю поле пустым. Однако, когда я нажимаю кнопку «Выход», я все равно получаю сообщение об ошибке, которое не исчезнет, ​​пока я снова не извлечу запись или не введу что-то еще в поле StudentIdText.

При нажатии на кнопку «Выход» я попытался установить фокус на другое поле (в данном случае скрытое). Я также пробовал его в другом поле, например «Имя», но предупреждение не исчезло.

// StudentController.java
public class StudentController {
@FXML private TextField studentIdText;
@FXML private TextField lastNameText;
@FXML private TextField firstNameText;

//Exit the program
@FXML
public void handleExit(ActionEvent actionEvent) {
    hiddenText.requestFocus();
    System.exit(0);
}

@FXML
public static void showErrorMessage(String infoMessage, String titleBar, String headerMessage)
{
    Alert alert = new Alert(AlertType.ERROR);
    alert.setTitle(titleBar);
    alert.setHeaderText(headerMessage);
    alert.setContentText(infoMessage);
    alert.showAndWait();
}

@FXML
private void initialize () {
// Listener to studentIdText field
    studentIdText.focusedProperty().addListener((observable, wasFocused, focused) -> {
        if (!focused && !studentIdText.getText().trim().isEmpty()) {
          searchStudent();
        }
        else {
            showErrorMessage("Enter valid Student ID#", "Student DB", "");
            studentIdText.requestFocus();
        }
    });

@FXML
private void searchStudent() throws ClassNotFoundException, SQLException {
  if (!studentIdText.getText().isEmpty()) {
    //Get Student information
    Student stu = StudentDAO.searchStudent(studentIdText.getText());
    populateAndShowStudent(stu);
  }
}

Сообщение об ошибке «Введите действительный идентификатор студента №» отображается все время, пока я не введу какой-либо текст в поле StudentIdText. Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 21 июня 2019

Вам не нужно искать ученика, если пользователь ничего не вводил:

studentIdText.focusedProperty().addListener((observable, wasFocused, focused) -> {
    if (!focused && !studentIdText.getText().trim().isEmpty()) {
        searchStudent();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...