【发布时间】:2023-03-16 01:01:01
【问题描述】:
这是支持我想要完成的代码:
对话框控制器代码:
public class DialogController {
@FXML private TextField firstName;
@FXML private TextField lastName;
@FXML private TextField phoneNumber;
@FXML private TextField notes;
@FXML private DialogPane dialogPane;
//All getters defined here
public void keyReleasedHandler(){
Boolean firstNameEmpty = (firstName.getText().isEmpty() || firstName.getText().trim().isEmpty());
Boolean lastNameEmpty = (lastName.getText().isEmpty() || lastName.getText().trim().isEmpty());
Boolean phoneNumberEmpty = (phoneNumber.getText().isEmpty() || phoneNumber.getText().trim().isEmpty());
if (firstNameEmpty || lastNameEmpty || phoneNumberEmpty){
//When the dialog box opens and I type or a delete a letter from any of the event binded fields, a null pointer exception is thrown
dialogPane.lookupButton(ButtonType.OK).setDisable(true);
}
dialogPane.lookupButton(ButtonType.OK).setDisable(false);
}
public Contact processResults(){
String firstName = getFirstName().getText().trim();
String lastName = getLastName().getText().trim();
String phoneNumber = getPhoneNumber().getText().trim();
String notes = getNotes().getText().trim();
return new Contact(phoneNumber, firstName, lastName, notes);
}}
我的主控制器中的相关方法和 UI 定义:
public class Controller {
@FXML private TableView<Contact> tableView;
@FXML private BorderPane mainBorderPane;
public void handleNewContact(){
Dialog<ButtonType> dialog = new Dialog<>();
dialog.initOwner(mainBorderPane.getScene().getWindow());
dialog.setTitle("Add a new contact to your list");
dialog.setHeaderText("Use this dialog to create a new contact");
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("dialogWindow.fxml"));
try {
dialog.getDialogPane().setContent(loader.load());
} catch (IOException e) {
System.out.println("Couldn't load the dialog");
e.printStackTrace();
return;
}
dialog.getDialogPane().getButtonTypes().add(ButtonType.OK);
dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
Optional<ButtonType> result = dialog.showAndWait();
if (result.isPresent() && result.get() == ButtonType.OK){
DialogController controller = loader.getController();
Contact contact = controller.processResults();
contactData.addContact(contact);
tableView.getSelectionModel().select(contact);
}
}
我在 keyReleasedHandler() 背后的思考过程是在我的“新联系人对话框”中验证我的 TextField。在我的主控制器中,我通过其 FXML 处理了对话框 UI 的创建,并在代码中手动添加了 ButtonTypes OK 和 Cancel。我将所有对话框 TextFields onKeyReleased 绑定到我的 keyReleasedHandler()。每当我在“已验证”字段中键入任何内容时,都会引发空指针异常(我假设 dialogPane 查找方法以某种方式返回 null)。
此验证功能的替代实现也将不胜感激。
【问题讨论】:
标签: java javafx nullpointerexception dialog event-handling