我有一个附加到我的 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/