JavaFX的新手,请耐心等待。
应用:库存管理系统。有零件,产品。产品可以具有关联的零件。在添加/修改产品屏幕中,您可以从所有可用零件的列表中添加与其关联的零件。
问题::所有零件列表将库存水平更新为相关零件库存水平也更新的水平。我需要它保持不变(一旦弄清楚,就不能处理减法)。
相关代码:
public class ProductDetailController implements Initializable {
....
public static ObservableList<Part> newListForTV = FXCollections.observableArrayList();
public static ObservableList<Part> exListForTV = FXCollections.observableArrayList();
private void SetupGrids() {
colPartID.setCellValueFactory(new PropertyValueFactory<>("partID"));
colPartName.setCellValueFactory(new PropertyValueFactory<>("name"));
colInventory.setCellValueFactory(new PropertyValueFactory<>("inStock"));
colPrice.setCellValueFactory(new PropertyValueFactory<>("price"));
tvExistingParts.setItems(exListForTV);
colNewPartID.setCellValueFactory(new PropertyValueFactory<>("partID"));
colNewPartName.setCellValueFactory(new PropertyValueFactory<>("name"));
colNewInventory.setCellValueFactory(new PropertyValueFactory<>("inStock"));
colNewPrice.setCellValueFactory(new PropertyValueFactory<>("price"));
//
for (Part nPartsAll : Inventory.allParts) {
if (!newListForTV.contains(nPartsAll)) {
newListForTV.addAll(Inventory.allParts);
}
}
tvNewParts.setItems(newListForTV);
}
public void AddPart() {
boolean partAvailable = false;
int selectionCheck = tvNewParts.getItems().size();
if (selectionCheck > 0) {
partN = tvNewParts.getSelectionModel().getSelectedItem();
partAvailable = CheckPartInventory(partN);
if (partAvailable) {
partEX = CheckIfContainsPart(exListForTV, partN);
if (partEX == null) {
tvExistingParts.getItems().add(partN);
partEX = CheckIfContainsPart(exListForTV, partN);
if (partEX.getPartID() == partN.getPartID()) {
ClearInventoryOfPart(partEX);
partEX.setInStock(1);
}
} else {
partEX.setInStock(partEX.getInStock() + 1);
tvExistingParts.refresh();
}
}
}
}
private Boolean CheckPartInventory(Part part) {
boolean available = false;
int invPartInven = 0, invPartMin = 0, invPartMax = 0;
for (Part invPart : Inventory.allParts) {
if (invPart.getPartID() == part.getPartID()) {
invPartInven = invPart.getInStock();
invPartMin = invPart.getMin();
invPartMax = invPart.getMax();
if (invPartInven <= invPartMin || invPartInven >= invPartMax || invPartInven == 0) {
available = false;
} else {
available = true;
}
}
}
return available;
}
private void CommitSaveOfProduct() {
try {
if (newProduct == false) {
exListForTV.forEach(part -> {
Product.addAssociatedPart(part);
});
Inventory.updateProduct(new AssociatedProParts(Integer.parseInt(tfID.getText()), tfName.getText(), Double.parseDouble(tfPrice.getText()),Integer.parseInt(tfINV.getText()),Integer.parseInt(tfMin.getText()),Integer.parseInt(tfMax.getText()),exListForTV));
genericClass.DisplayInformationAlert("Existing product has been successfully saved.");
tvExistingParts.getItems().clear();
genericClass.GoToPage(btnCancel, constants.productNavLocation, constants.productPageTitle);
} else if (newProduct == true) {
Inventory.addProduct(new AssociatedProParts(tfName.getText(), Double.parseDouble(tfPrice.getText()),Integer.parseInt(tfINV.getText()),Integer.parseInt(tfMin.getText()),Integer.parseInt(tfMax.getText()),exListForTV));
genericClass.DisplayInformationAlert("New product has been successfully saved.");
tvExistingParts.getItems().clear();
genericClass.GoToPage(btnCancel, constants.productNavLocation, constants.productPageTitle);
}
} catch (Exception ex) {
genericClass.DisplayErrorAlert("Saving Product has failed...");
}
}
........
}
public class Inventory {
public static ObservableList<Product> allProducts = FXCollections.observableArrayList();
public static ObservableList<Part> associatedParts = FXCollections.observableArrayList();
public static ObservableList<Part> allParts = FXCollections.observableArrayList();;
.......
}
public class AssociatedProParts extends Product {
public static ObservableList<Part> aParts = FXCollections.observableArrayList();
public AssociatedProParts() {
super(0,"",0,0,0,0);
}
public AssociatedProParts(int productID, String name, double price, int inStock, int min, int max, ObservableList<Part> associatedParts) {
super(productID, name, price, inStock, min, max);
aParts.addAll(associatedParts);
}
public AssociatedProParts(String name, double price, int inStock, int min, int max, ObservableList<Part> associatedParts) {
super(name, price, inStock, min, max);
aParts.addAll(associatedParts);
}
public void setAParts(Part part) {
aParts.add(part);
Inventory.associatedParts.addAll(aParts);
}
public ObservableList<Part> getAParts() {
return aParts;
}
}
最后:我的问题是newListForTV将库存水平更新为exListForTV的库存水平。 newListForTV无需更改。这让我发疯。 是的,我仍然需要仔细检查并整理事物,以免混乱。现在,我只需要这个即可。
答案 0 :(得分:0)
尽管我想找到一种更有效的方法。我设法通过在零件中添加另一个吸气剂/装料器来解决库存变化,从而使其能够正常工作。