JavaFX:如何管理不同节点之间的focusedProperty?

标签 java javafx

我有一个附加到我的 StudentIDText 字段的监听器,它从数据库中获取学生记录。但是,如果我将该字段留空,我会显示一条错误消息。但是,当我点击“退出”按钮时,我仍然会收到错误消息,直到我再次获取记录或在 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);
  }
}

错误消息“输入有效的学生 ID#”一直显示,直到我在 StudentIdText 字段中输入任何文本。还有其他方法可以做到这一点吗?

最佳答案

如果用户未输入任何内容,您无需搜索学生:

studentIdText.focusedProperty().addListener((observable, wasFocused, focused) -> {
    if (!focused && !studentIdText.getText().trim().isEmpty()) {
        searchStudent();
    }
});

关于JavaFX:如何管理不同节点之间的focusedProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56706173/

相关文章:

java - 为什么我在启动简单代码(JavaFX)时遇到问题?

javafx - 无法填充在 SceneBuilder 2 中创建的 JavaFX TableView

java - Java线程和操作系统线程的区别?

java - 系统存储库未显示存储库详细信息

java - 通过Android手机发送和接收字符串

java - 如何使用java从xml(DOM)的多级标签中读取特定元素

canvas - 在 JavaFX 中使用 MouseEvent 和 MouseClicked 选择并移动 Canvas 图像

java - 如何在 Java 9+ 中查找类模块的名称?

java - 创建 JavaFX Video Player 类的实例

java - 为什么它总是说最低的数字是 Null?