Невозможно правильно назначить ObservableList - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть список наблюдаемых, который называется allcustomers

public ObservableList<Customer> allcustomers = FXCollections.observableArrayList();

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

Когда клиент заказывает еду, он в конечном итоге нажимает кнопку отправки. Это добавляет заказ клиенту, а затем клиент добавляется в класс таблицы

package sample.controllers;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.*;
import javafx.stage.Window;
import sample.Global;
import sample.entitities.Customer;
import sample.entitities.FoodDrink;
import sample.entitities.Table;

import java.io.IOException;
import java.security.spec.RSAOtherPrimeInfo;
import java.util.ArrayList;

public class MenuScreenController {
    public ListView<FoodDrink> lvStarters;
    public ListView<FoodDrink> lvDesserts;
    public ListView<FoodDrink> lvMains;
    public ListView<FoodDrink> lvDrinks;
    public ListView<FoodDrink> lvOrder;
    //public TableView<FoodDrink> tblDrinks;

    public Button btnAddStarter;
    public Button btnAddDessert;
    public Button btnAddMain;
    public Button btnAddDrink;
    public Button btnRemoveItem;
    public Button btnSubmitOrder;

    public Label lblOrderCost;
    public Label lblcusno;


    public Integer noOfDiners;
    public Integer value;
    public Integer customerNo;
    public ObservableList<Customer> allcustomers = FXCollections.observableArrayList();



    private FoodDrinkController fdc = new FoodDrinkController();
    private ObservableList<FoodDrink> order = FXCollections.observableArrayList();
    private Customer cus = new Customer();
    private Table tbl = new Table();
    //private StartScreenController ssc = new StartScreenController();


    public void dataReceiver(Integer passedMessage){
        this.noOfDiners = passedMessage;
        System.out.println("No of customers is "+ noOfDiners);



        //this.value = passedMessage;
        //noOfDiners = value;

    }


    @FXML
    public void initialize() {

        //System.out.println("init");
        lvStarters.setItems(fdc.filterByType(Global.itemtype.STARTER));
        lvMains.setItems(fdc.filterByType(Global.itemtype.MAIN));
        lvDesserts.setItems(fdc.filterByType(Global.itemtype.DESSERT));
        lvDrinks.setItems(fdc.filterByType(Global.itemtype.DRINK));
        lvOrder.setItems(order);
        //tblDrinks.setItems(fdc.filterByType(Global.itemtype.DRINK));

        //lblcusno.setText(String.valueOf(customerNo));

        //noOfDiners = ssc.getCbnumberofdiners().getValue();
        //System.out.println(noOfDiners);



    }

    public void btnAddStarterClick(ActionEvent actionEvent) {
        FoodDrink item = lvStarters.getSelectionModel().getSelectedItem();
        addItemToOrder(item);
        lvStarters.getSelectionModel().select(-1);
    }

    public void btnAddDessertClick(ActionEvent actionEvent) {
        FoodDrink item = lvDesserts.getSelectionModel().getSelectedItem();
        addItemToOrder(item);
        lvDesserts.getSelectionModel().select(-1);
    }

    public void btnAddMainClick(ActionEvent actionEvent) {
        FoodDrink item = lvMains.getSelectionModel().getSelectedItem();
        addItemToOrder(item);
        lvMains.getSelectionModel().select(-1);
    }

    public void btnAddDrinkClick(ActionEvent actionEvent) {
        FoodDrink item = lvDrinks.getSelectionModel().getSelectedItem();
        addItemToOrder(item);
        lvDrinks.getSelectionModel().select(-1);
    }

    public void addItemToOrder(FoodDrink item) {
        if(item != null){
            order.add(item);
            lblOrderCost.setText(String.valueOf(calculateCost()));
        }else{
            System.out.println("select an item from the list.");
        }
    }

    public void btnRemoveItemClick(ActionEvent actionEvent) {
        FoodDrink foodDrink = lvOrder.getSelectionModel().getSelectedItem();
        if(foodDrink != null){

            order.remove(foodDrink);
            lblOrderCost.setText(String.valueOf(calculateCost()));

        }else{
            System.out.println("Please select am item to remove");
        }
    }



    public void submitorder(ActionEvent actionEvent) throws IOException {
        //create a new UNIQUE customer to store that customers menu items
        Customer cust = new Customer();
        cust.setOrder(order); // <--- This adds the correct order to the customer this works



        tbl.getCustomers().add(cust); //<-- This adds the customer to a 'table' class this prints out correctly
        System.out.println(tbl.getCustomers()); // = [Customer{customernumber=null, customerorder=[burger'7.99, Coca Cola'2.99]}]

        lvOrder.getItems().clear();

        if (tbl.getCustomers().size() == noOfDiners) {
            allcustomers = tbl.getCustomers(); // <-- Printing this out gives an empty table
            System.out.println(tbl.getCustomers()); // Printing this out gives this [Customer{customernumber=null, customerorder=[]}]

            try {
                Window mainWindow = btnSubmitOrder.getScene().getWindow();

                // create an instance eof the Loader which is used to open the next screen.
                FXMLLoader loader = new FXMLLoader();
                //set the location
                loader.setLocation(getClass().getResource("../interfaces/paymentScreen.fxml"));
                // add loader to root
                Parent root = loader.load();
                //get the controller of the loader just created
                PaymentScreenController psc = loader.getController();
                //call method which receives data in new controller and pass it the value required.
                psc.dataReceiver(allcustomers);

                mainWindow.getScene().setRoot(root);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }

    }



    public double calculateCost(){
        double cost = 0;
        for (FoodDrink foodDrink : order) {
            cost += foodDrink.getPrice();
        }
        return cost;
    }
}

Оператор if работает, получая размер таблицы (сколько в ней клиентов) и сравнивая его с Заявленное количество клиентов в начале количество посетителей (это работает). Если они совпадают, то всем клиентам назначается получение всех клиентов из таблицы. По какой-то причине это не работает

Любая помощь будет оценена спасибо

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