как добавить текстовое поле из одного всплывающего окна на главный экран с собственными контроллерами - PullRequest
1 голос
/ 19 марта 2019

Как добавить двойное из одного всплывающего текстового поля в другое текстовое поле на главном экране.У меня есть система кинотеатров, где есть главная страница, на которой показана общая стоимость, а также всплывающее окно с напитками.Как получить значение из всплывающего окна с напитками, чтобы добавить его в текстовое поле в главном окне.Я назначил оба класса переменной completetotal, которая должна сложиться и закрыть окно, когда я нажимаю кнопку «Готово».Однако это не так.

Контроллер для drinkspopup

import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import static sample.FilmsController.completetotal;

public class DrinksController {

    public TextField watertf;
    public TextField coketf;
    public Button totalbut;
    public TextField totaltf;
    public Button finishdrinks2;

    private FilmsController fc = new FilmsController();

    /*changed button to private */

    /*public TextField gettotaltf() {
        return totaltf;
    }

    private FilmsController parent;*/


    private Drinks drink = new Drinks();

   /* public void setParent(FilmsController fc) {
        // Remember the reference to the parent GUI, then we can call its methods
        parent = fc;
    }*/


    /*added action event*/
    public void addrinks(ActionEvent actionEvent) {

        try {

            int water = new Integer(watertf.getText());

            int coke = new Integer(coketf.getText());

            double result = water * (1.75) + coke * (1.25);

            totaltf.setText("" + result);

            completetotal += result;

        } catch (NumberFormatException e) {

            totaltf.setText("Not a Number");


        }
    }
    /*This is supposed to add the drinks then add it to the variable complete total*/
    public void finishdrinksclose2(ActionEvent actionEvent) {
        int water = new Integer(watertf.getText());

        int coke = new Integer(coketf.getText());

        double result = water * (1.75) + coke * (1.25);

        completetotal += result;

        totaltf.setText("" + result);

        Stage stage = (Stage) finishdrinks2.getScene().getWindow();
        stage.close();
        }
    }

Mainscreen Filmscontroller

 public void comptotal(ActionEvent actionEvent) {

    try {
        int adult = new Integer(adulttf.getText());
        int child = new Integer(childtf.getText());
        double filmprice= new Double(filmpricetf.getText());

        double result = adult * (filmprice) + child*(filmprice);

        completetotal+= result;

        totalpricetf.setText("" + result);

    }
    catch (NumberFormatException e) {

        totalpricetf.setText("Not a Number");

    }}
}

Я добавил только часть кода, которая выполняет процедуру на пленочном контроллере.

1 Ответ

0 голосов
/ 19 марта 2019

Представим себе ваш главный экран при попытке вызвать всплывающее окно

click.setOnAction(event -> {
    FXMLLoader loader = new FXMLLoader();
    try {
        Parent parent =  loader.load(getClass().getClassLoader().getResource("second.fxml").openStream());
        Stage stage = new Stage();
        stage.setScene(new Scene(parent));
        stage.initModality(Modality.APPLICATION_MODAL);
        Children children = loader.getController();
        children.setController(this);
        stage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
});

Представьте себе это всплывающее окно

@FXML
private JFXTextField field;
private Controller controller;
@FXML private Button cls;
@Override
public void initialize(URL location, ResourceBundle resources)
{
    cls.setOnAction(event -> {
            this.controller.setTextIntoTextField(field.getText());
        Stage stage = (Stage)((Button)(event).getSource()).getScene().getWindow();
        stage.close();
    });

}

public void setController(Controller controller) {
    this.controller = controller;
}

этот тип метода обратного вызова может помочь вам загрузить все данные, которые должны появиться на главном экране, точнее от дочерних элементов до класса родительского контроллера

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