У меня есть список наблюдаемых, который называется 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 работает, получая размер таблицы (сколько в ней клиентов) и сравнивая его с Заявленное количество клиентов в начале количество посетителей (это работает). Если они совпадают, то всем клиентам назначается получение всех клиентов из таблицы. По какой-то причине это не работает
Любая помощь будет оценена спасибо