Как добавить значение из всплывающего окна в главное окно? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть система кинотеатра.У меня есть всплывающее окно, которое показывает пользователю, какие напитки они могут купить и сколько всего будет.У меня тоже итого в главном окне.Теперь я хочу закрыть всплывающее окно с напитками, чтобы обновить общее количество в главном окне.Но что происходит, когда я закрываю всплывающее окно, я получаю сообщение об ошибке.Код для всего этого находится в одном контроллере.

Вот код, когда я закрываю окно с напитками:

public void finishdrinksclose2(ActionEvent actionEvent ) {
    System.out.println(FilmsController.completetotal);
    Stage stage = (Stage) finishdrinks2.getScene().getWindow();
    setCompletetotal(completetotal);
    //line below is where error is pointing to
    totalpricetf.setText(String.valueOf(completetotal));
    stage.close();
}

До того, как я закрою всплывающее окно с напитками и сноваОткрой это.Итоговое значение (totalpricetf) будет обновляться само по себе:

public void drinksPopUpStage(ActionEvent actionEvent) throws IOException{
    Scene drinksscene = new Scene(FXMLLoader.load(getClass().getResource("Drinks.fxml")));
    Stage Drinks = new Stage();
    Drinks.setScene(drinksscene);
    Drinks.initModality(Modality.APPLICATION_MODAL);
    Drinks.show();
    totalpricetf.setText("£" + completetotal);
}

В чем заключается мой вопрос: почему происходит полное обновление, когда я добавляю его в метод повторного открытия всплывающего окна, но при добавлении его в меня возникает пустое исключениеметод закрытия окна?

1 Ответ

0 голосов
/ 25 сентября 2019

Вы должны разделить свою логику на два отдельных контроллера:

  • PopUpController
  • MainController

Используйте PopUpController в вашем MainControllerи воспользуйтесь результатами диалога.

Вот базовый пример

public class PopUpController {

     private static PopUpController INSTANCE;

     // UI dialog for drink choice
     private Dialog<Double> drinkDialog;

     // TextField containing the price (or total)
     private TextField drinkPrice;

     @Override
     public void initialize(URL location, ResourceBundle resources) {
          INSTANCE = this;
     }

     public double chooseDrink() {
        double price = Double.parseDouble(drinkPrice.getText());
        close(price);
        return dialog.getResult();
     }

     public void close(double price) {
         // before closing set the total price (double) as a result for dialog
         dialog.setResult(price);
         dialog.getDialogStage().close();
     }

     public PopUpController getInstance() {
         return INSTANCE;
     }
}

В вашем MainController используйте вас popUpController INSTANCE:

public class MainController {

    public showDrinks() {
        PopUpController drinksPopup = PopUpController.getInstance();
        double price = drinksPopup.chooseDrink();
    }
}

методы setResult () и getResult () важны при работе с диалогами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...