Добавление элемента из одного табличного представления в другое из выбора (JAVAFX) - PullRequest
3 голосов
/ 28 января 2020

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

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

Logi c находится под addButton().

public class OrderController implements Initializable {

    OrderRepository or = new OrderRepository();
    ShoeRepository sr = new ShoeRepository();

    LogInController logInController = new LogInController();
    private int customer_ID;
    private int total;
    private List<ProductCart> productCarts = new LinkedList<>();

    @FXML
    private Label label_total;

    @FXML
    private Button button_makeOrder;
    @FXML
    private Button button_add;
    @FXML
    private Button button_remove;
    @FXML
    private TableView<ProductCart> table_cart;
    @FXML
    private TableView<Product> tableProduct;
    @FXML
    private TableColumn<Product, String> col_shoe;
    @FXML
    private TableColumn<Product, String> col_brand;
    @FXML
    private TableColumn<Product, String> col_color;
    @FXML
    private TableColumn<Product, Integer> col_size;
    @FXML
    private TableColumn<Product, Integer> col_price;
    @FXML
    private TableColumn<Product, Integer> col_stock;
    @FXML
    private TableColumn<ProductCart, String> col_cart_Shoe;

    @FXML
    private TableColumn<ProductCart, String> col_cart_brand;
    @FXML
    private TableColumn<ProductCart, String> col_cart_color;
    @FXML
    private TableColumn<ProductCart, Integer> col_cart_size;
    @FXML
    private TableColumn<ProductCart, Integer> col_cart_price;
    @FXML
    private TableColumn<ProductCart, Integer> col_cart_quantity;

    public void a() {
        System.out.println(customer_ID);
    }

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        col_shoe.setCellValueFactory(new PropertyValueFactory<>("shoeName"));
        col_brand.setCellValueFactory(new PropertyValueFactory<>("shoeBrand"));
        col_color.setCellValueFactory(new PropertyValueFactory<>("shoeColor"));
        col_size.setCellValueFactory(new PropertyValueFactory<>("shoeSize"));
        col_price.setCellValueFactory(new PropertyValueFactory<>("shoePrice"));
        col_stock.setCellValueFactory(new PropertyValueFactory<>("stock"));

        col_cart_Shoe.setCellValueFactory(new PropertyValueFactory<>("name"));
        col_cart_brand.setCellValueFactory(new PropertyValueFactory<>("brand"));
        col_cart_color.setCellValueFactory(new PropertyValueFactory<>("color"));
        col_cart_size.setCellValueFactory(new PropertyValueFactory<>("size"));
        col_cart_price.setCellValueFactory(new PropertyValueFactory<>("price"));
        col_cart_quantity.setCellValueFactory(new PropertyValueFactory<>("quantity"));
        getProducts();
        tableProduct.setItems(observableList);
        customer_ID = logInController.getCustomer_ID();
    }

    ObservableList<Product> observableList = FXCollections.observableArrayList();
    ObservableList<ProductCart> observableListC = FXCollections.observableArrayList();


    public void getProducts() {
        List<Product> products = new ArrayList<>();
        List<Shoe> shoes = sr.getAllShoes();

        shoes.forEach(shoe -> products.add(new Product(shoe.getShoe_ID(), shoe.getName(), shoe.getBrand().getName(),
                shoe.getColor().getName(), shoe.getShoeSize().getShoeSize(), shoe.getInStock().getStock(),
                shoe.getPrice().getPrice())));

        products.forEach(product -> observableList.add(product));
    }

    public int getCustomer_ID() {
        return customer_ID;
    }

    public void addButton() {

        Product product = tableProduct.getSelectionModel().getSelectedItem();
        ProductCart productCart = new ProductCart(product.getID(), product.getShoeName(), product.getShoeBrand(), product.getShoeColor(),
                product.getShoeSize(),1, product.getShoePrice());
        System.out.println(productCart.getName());

        for (ProductCart item: productCarts) {
            if (item.getName().equals(productCart.getName())) {
                item.setQuantity(item.getQuantity() + 1);
                table_cart.getItems().clear();
                observableListC.remove(item);
                observableListC.add(item);
            }
            else {
                productCarts.add(item);
                observableListC.add(item);
            }
        }
        table_cart.setItems(observableListC);
        updateTotal();

    }

    public void removeButton() {

    }

    public void makeOrder() {

    }

    public void updateTotal() {
        total = 0;
        List<ProductCart> productCarts = table_cart.getItems();
        productCarts.forEach(productCart -> total += productCart.getPrice());
        label_total.setText(total+"");
    }
}

Изменение только количества и запаса в таблицы теперь работают намного лучше. Однако, как только элемент добавляется в таблицу, добавление той же строки кажется мне невозможным без каких-либо ошибок.

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

Версия 2: возможность добавлять строки отключает возможность добавления количества к существующей строке.

https://i.stack.imgur.com/EYoJ3.png

public void addButton() {
    ProductCart productCart;
    Product product = tableProduct.getSelectionModel().getSelectedItem();
    productCart = new ProductCart(product.getID(), product.getShoeName(), product.getShoeBrand(),
    product.getShoeColor(), product.getShoeSize(), product.getSold()+1, product.getShoePrice());

    if (product.getStock() != 0) {
        table_cart.getItems().add(productCart);
    }
    updateStock();
    updateTotal();
}
...