Описание
У меня есть три класса контроллеров, MenuController
и MyAccountController
и EditAccountController
, у меня есть метод showMyAccount ()
в MenuController
и editMyAccount ()
в MyAccountController
и updateMyAccount()
в EditAccountController
. В моем MenuController У меня есть ImageView с id=accountImage
, когда пользователь нажимает на это изображение. Он получает новый этап, содержащий информацию о его accoount.It пользователь click editAccountButton мой вызов программы editMyAccount()
, чтобы показать другое окно, чтобы изменить его информацию об учетной записи, пользователь может изменить свою фотографию учетной записи, когда он нажмет saveChange, это должно измениться на изображение ViewImage, но это не потому, что у меня нет способа передать imageView accountImage
из MenuController для редактированияAccountController, проходящего через MyAccountController. Как я могу передать параметр (id FXMl) от первого контроллера до третьего контроллера, проходящего вторым контроллером.
код
В классе MenuController
первое действие
@FXML
ImageView accountImage;
public void showMyAccount() {
Stage myAccount = new Stage();
FXMLLoader fxm = new FXMLLoader(getClass().getResource("MyAccount.fxml"));
try {
Parent parent = (Parent) fxm.load();
Scene scene = new Scene(parent);
scene.setFill(null);
myAccount.setScene(scene);
} catch (Exception e) {
e.printStackTrace();
}
myAccount.initStyle(StageStyle.DECORATED);
myAccount.centerOnScreen();
myAccount.getIcons().add(new Image("/Images/Casque.png"));
myAccount.initOwner(InnerStage);
myAccount.setTitle("Mon compte");
myAccount.setResizable(false);
myAccount.show();
myAccount.addEventHandler(KeyEvent.ANY, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.ESCAPE) {
myAccount.hide();
}
}
});
MyAccountController accountController = fxm.getController();
accountController.setStage(myAccount);
accountController.setProfileImage(accountImage);//passing parameter to MyAccountController
В классе MyAccountController
secondAction
public void editMyAccount() {
Stage editAccount = new Stage();
FXMLLoader fxm = new FXMLLoader(getClass().getResource("EditAccount.fxml"));
try {
Parent parent = (Parent) fxm.load();
Scene scene = new Scene(parent);
scene.setFill(null);
editAccount.setScene(scene);
} catch (Exception e) {
e.printStackTrace();
}
editAccount.initStyle(StageStyle.DECORATED);
editAccount.initModality(Modality.APPLICATION_MODAL);
editAccount.centerOnScreen();
editAccount.setResizable(false);
editAccount.setTitle("Editer compte");
editAccount.getIcons().add(new Image("/Images/Casque.png"));
editAccount.initOwner(stage.getOwner());
editAccount.show();
editAccount.addEventHandler(KeyEvent.ANY, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.ESCAPE) {
editAccount.close();
}
}
});
EditAccountController editAccountController = fxm.getController();
editAccountController.setStage(editAccount);
String userNameText = this.userName.getText();
String passwordText = this.password.getText();
Image imageAccount = this.accountImage.getImage();
editAccountController.setInformation(imageAccount, userNameText, passwordText);
stage.close();
}
ImageView setProfileImage(ImageView accountImage) {
return accountImage; //How can i pass this imageview to nextcontroller "EditAccountcontroller"
}
Третий контроллер EditAccountController
. Как этот контроллер может получить идентификатор изображения из второго контроллера (этот идентификатор поступает от первого контроллера).
public void editMyAccount() throws FileNotFoundException, IOException {
String name = userNameField.getText().trim();
String password = passwordField.getText();
User user = new User(name, password);
if (new UserDao().FindString(name) == null || (new UserDao().FindString(name) != null && name.equals(currentName))) {
if (file != null) {
new UserDao().updateUser(currentName, user, file);
clearFields();
succesMessage();
hideStage();
//Here i need change imageView image id=accountImage
} else {
new UserDao().update(currentName, user);
clearFields();
succesMessage();
hideStage();
}
} else {
existAccount();
}
}
StackTrace
Вызвано: java.lang.NullPointerException в hmproject.EditAccountController.editMyAccount(EditAccountController.java:263) ... 62 больше
Это исключение вызвано, потому что я получаю null, когда мне нужно изменить изображение imageView accountImage
. Любой знает, как я могу обновить параметр или node контент от другого контроллера?