Java 传递可观察列表并将其分配给对象时遇到问题

Java 传递可观察列表并将其分配给对象时遇到问题,java,javafx,Java,Javafx,我在学习Java/JavaFX这是一个库存管理系统,在这个系统中,我应该能够创建一个产品,并将另一个可观察列表中的零件分配给该productID。我遇到的问题是,它将允许我在GUI中添加部件,并将其发送到内存,但它不会将其发送到我试图附加部件的特定ID。产品类别和控制器的代码如下: package Model; import javafx.collections.FXCollections; import javafx.collections.ObservableList; public c

我在学习Java/JavaFX这是一个库存管理系统,在这个系统中,我应该能够创建一个产品,并将另一个可观察列表中的零件分配给该productID。我遇到的问题是,它将允许我在GUI中添加部件,并将其发送到内存,但它不会将其发送到我试图附加部件的特定ID。产品类别和控制器的代码如下:

package Model;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class Product {

    private static ObservableList<Part> part = FXCollections.observableArrayList();
    private int productID;
    private String name;
    private double price;
    private int inStock;
    private int min;
    private int max;

    //Product constructor
    public Product(int productID, String name, double price, int inStock, int min, int max) {
        this.productID = productID;
        this.name = name;
        this.price = price;
        this.inStock = inStock;
        this.min = min;
        this.max = max;
    }
    public static ObservableList<Part> getPart() {
        return Product.part;
    }

    public void setPart(ObservableList<Part> part) {
        Product.part = part;
    }
}
包模型;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
公共类产品{
私有静态ObservableList部分=FXCollections.observableArrayList();
私有int-productID;
私有字符串名称;
私人双价;
私人int inStock;
私用int min;
私人int max;
//产品构造师
公共产品(int productID、字符串名称、双倍价格、int inStock、int min、int max){
this.productID=productID;
this.name=名称;
这个价格=价格;
this.inStock=inStock;
this.min=min;
this.max=max;
}
公共静态可观察列表getPart(){
退货产品、零件;
}
公共无效集合部分(可观察列表部分){
产品.零件=零件;
}
}
包视图控制器;
进口模式。存货;
导入模型部分;
进口型号、产品;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.fxml.fxmloader;
导入javafx.fxml.Initializable;
导入javafx.scene.Node;
导入javafx.scene.Parent;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.input.MouseEvent;
导入javafx.stage.stage;
导入java.io.IOException;
导入java.net.URL;
导入java.util.Optional;
导入java.util.ResourceBundle;
公共类AddProduct实现了可初始化{
公共按钮addProductSearchButton;
公共按钮addProductAddButton;
公共按钮AddProductCancel按钮;
公共按钮addProductSaveButton;
公共按钮addProductDeleteButton;
公共文本字段productIDTxtbox;
公共文本字段productNameTxtbox;
公共文本字段productInvTxtbox;
公共文本字段productMaxTxtField;
公共文本字段productPriceTxtbox;
公共文本字段productMinTxtbox;
公共文本字段productSearchTxtbox;
公共TableView部件选择TableView;
public TableColumn partSelectionIDColumn;
公共表列partSelectionNameColumn;
公共表列部分选择vColumn;
公共表列PartSelectionPrice列;
公共表视图productPartsTableview;
PublicTableColumn ProductPartitionColumn;
公共表列productPartNameColumn;
公共TableColumn productPartInvColumn;
公共表列productPartPriceColumn;
私有ObservableList availablePart=FXCollections.observableArrayList();
公共void初始化(URL、ResourceBundle rb){
partSelectionTableview.setItems(Inventory.getAllPart());
partSelectionIDColumn.setCellValueFactory(新属性ValueFactory(“partID”));
partSelectionNameColumn.setCellValueFactory(新属性ValueFactory(“partName”));
partSelectionInvColumn.setCellValueFactory((新属性ValueFactory(“partInStock”));
partSelectionPriceColumn.setCellValueFactory(新属性ValueFactory(“partPrice”));
productPartsTableview.setItems(可用部分);
productPartIDColumn.setCellValueFactory(新属性ValueFactory(“partID”));
productPartNameColumn.setCellValueFactory(新属性ValueFactory(“partName”));
productPartInvColumn.setCellValueFactory(新的PropertyValueFactory(“partInStock”);
productPartPriceColumn.setCellValueFactory(新属性ValueFactory(“partPrice”)
public void addProductSaveButton(MouseEvent MouseEvent)引发IOException{
productadd=新产品(0,“,0.0,0,0,0);
if(productIDTxtbox.getText().isEmpty()){
productadd.setProductID(Inventory.getProductIDCount());
}
如果(!productNameTxtbox.getText().isEmpty()){
productadd.setName(productNameTxtbox.getText());
}
如果(!productPriceTxtbox.getText().isEmpty()){
productadd.setPrice(Double.parseDouble(productPriceTxtbox.getText());
}
如果(!productInvTxtbox.getText().isEmpty()){
productadd.setInStock(Integer.parseInt(productInvTxtbox.getText());
}
如果(!productMinTxtbox.getText().isEmpty()){
setMin(Integer.parseInt(productMinTxtbox.getText());
}
如果(!productMaxTxtField.getText().isEmpty()){
setMax(Integer.parseInt(productmaxtfield.getText());
}
如果(!availablePart.isEmpty()){
productadd.setPart(可用部件);
}
if(availablePart.isEmpty()){
Alert Alert=新警报(Alert.AlertType.INFORMATION);
alert.setHeaderText(“所有产品必须至少包含1个零件!”);
alert.showAndWait();
}
否则{
Inventory.addProduct(productadd);
父addProductSave=FXMLLoader.load(getClass().getResource(“MainScreen.fxml”);
场景场景=新场景(addProductSave);
Stage window=(Stage)((节点)mouseEvent.getSource()).getScene().getWindow();
window.setScene(场景);
window.show();
}
}

发现问题是试图使用非静态方法调用静态方法

也许你可以创建一个。请注意参考的帮助页面中的M-没有人想涉过大量不相关的代码!将代码编辑到我认为问题所在的位置。帮助页面解释了如何创建一个可复制的示例:想法是您提供了一个小的完整示例,潜在的帮助者可以将其放入t
package ViewController;

import Model.Inventory;
import Model.Part;
import Model.Product;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.Optional;
import java.util.ResourceBundle;

public class AddProduct implements Initializable {
    public Button addProductSearchButton;
    public Button addProductAddButton;
    public Button addProductCancelButton;
    public Button addProductSaveButton;
    public Button addProductDeleteButton;
    public TextField productIDTxtbox;
    public TextField productNameTxtbox;
    public TextField productInvTxtbox;
    public TextField productMaxTxtField;
    public TextField productPriceTxtbox;
    public TextField productMinTxtbox;
    public TextField productSearchTxtbox;
    public TableView<Part> partSelectionTableview;
    public TableColumn<Part, Integer> partSelectionIDColumn;
    public TableColumn<Part, String> partSelectionNameColumn;
    public TableColumn<Part, Integer> partSelectionInvColumn;
    public TableColumn<Part, Double> partSelectionPriceColumn;
    public TableView<Part> productPartsTableview;
    public TableColumn<Part, Integer> productPartIDColumn;
    public TableColumn<Part, String> productPartNameColumn;
    public TableColumn<Part, Integer> productPartInvColumn;
    public TableColumn<Part, Double> productPartPriceColumn;

    private ObservableList<Part> availablePart = FXCollections.observableArrayList();


    public void initialize(URL url, ResourceBundle rb){
        partSelectionTableview.setItems(Inventory.getAllPart());
        partSelectionIDColumn.setCellValueFactory(new PropertyValueFactory<>("partID"));
        partSelectionNameColumn.setCellValueFactory(new PropertyValueFactory<>("partName"));
        partSelectionInvColumn.setCellValueFactory((new PropertyValueFactory<>("partInStock")));
        partSelectionPriceColumn.setCellValueFactory(new PropertyValueFactory<>("partPrice"));
        productPartsTableview.setItems(availablePart);
        productPartIDColumn.setCellValueFactory(new PropertyValueFactory<>("partID"));
        productPartNameColumn.setCellValueFactory(new PropertyValueFactory<>("partName"));
        productPartInvColumn.setCellValueFactory(new PropertyValueFactory<>("partInStock"));
        productPartPriceColumn.setCellValueFactory(new PropertyValueFactory<>("partPrice")

    public void addProductSaveButton(MouseEvent mouseEvent) throws IOException {
        Product productadd = new Product(0,"",0.0,0,0,0);
        if (productIDTxtbox.getText().isEmpty()){
            productadd.setProductID(Inventory.getProductIDCount());
        }
        if (!productNameTxtbox.getText().isEmpty()){
            productadd.setName(productNameTxtbox.getText());
        }
        if (!productPriceTxtbox.getText().isEmpty()){
            productadd.setPrice(Double.parseDouble(productPriceTxtbox.getText()));
        }
        if (!productInvTxtbox.getText().isEmpty()){
            productadd.setInStock(Integer.parseInt(productInvTxtbox.getText()));
        }
        if (!productMinTxtbox.getText().isEmpty()){
            productadd.setMin(Integer.parseInt(productMinTxtbox.getText()));
        }
        if (!productMaxTxtField.getText().isEmpty()){
            productadd.setMax(Integer.parseInt(productMaxTxtField.getText()));
        }
        if (!availablePart.isEmpty()) {
            productadd.setPart(availablePart);
        }

        if(availablePart.isEmpty()){
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setHeaderText("All products must contain at least 1 Part!");
            alert.showAndWait();
        }
        else {
            Inventory.addProduct(productadd);
            Parent addProductSave = FXMLLoader.load(getClass().getResource("MainScreen.fxml"));
            Scene scene = new Scene(addProductSave);
            Stage window = (Stage) ((Node) mouseEvent.getSource()).getScene().getWindow();
            window.setScene(scene);
            window.show();
        }
}