添加重复项时如何更新 TableView 中的行(而不是添加新行)? [JavaFX]
How do you update a row (rather than add a new row) in a TableView when duplicate items are added? [JavaFX]
将项目添加到显示在 TableView 中的 ObservableList 时,如何在添加重复项目时更新行?
例如考虑一个包含三列的 TableView:商品、数量和价格。这可以通过以下代码实现:
@FXML
TableColumn itemColumn;
@FXML
TableColumn qtyColumn;
@FXML
TableColumn priceColumn;
TableView orderTable;
ObservableList orderList = FXCollections.observableArrayList();
public void addItem(String a, int b, Double c) {
Item entry = new Item(a, b, c);
currentOrderTable.getItems().add(entry);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
itemColumn.setCellValueFactory(new PropertyValueFactory<Item, Integer>("item"));
qtyColumn.setCellValueFactory(new PropertyValueFactory<Item, String>("quantity"));
priceColumn.setCellValueFactory(new PropertyValueFactory<Item, Double>("price"));
orderTable.setItems(orderList);
}
在目前的形式中,您可能会得到这样的 table:
项目 -------- 数量 ----- 价格.
炒面 ----- 1 ---------- 4.20 .
泰式炒粉 ------ 1 ---------- 5.50 .
炒面 ----- 1 ---------- 4.20 .
泰式炒粉 ------ 1 ---------- 5.50.
但我要找的是 table 这样的:
项目 -------- 数量 ----- 价格.
炒面 ----- 1 ---------- 8.40 .
泰式炒河粉 ------ 1 ---------- 11.00。
扫描 table 的项目以查看是否存在现有项目:
public void addItem(String itemName, int quantity, Double price) {
Item entry = currentOrderTable.getItems().stream()
.filter(item -> item.getItem().equals(itemName))
.findAny()
.orElseGet(()-> {
Item newItem = new Item(itemName, 0, 0);
currentOrderTable.getItems().add(newItem);
return newItem ;
});
entry.setQuantity(entry.getQuantity() + quantity)
entry.setPrice(entry.getPrice() + price);
}
将项目添加到显示在 TableView 中的 ObservableList 时,如何在添加重复项目时更新行?
例如考虑一个包含三列的 TableView:商品、数量和价格。这可以通过以下代码实现:
@FXML
TableColumn itemColumn;
@FXML
TableColumn qtyColumn;
@FXML
TableColumn priceColumn;
TableView orderTable;
ObservableList orderList = FXCollections.observableArrayList();
public void addItem(String a, int b, Double c) {
Item entry = new Item(a, b, c);
currentOrderTable.getItems().add(entry);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
itemColumn.setCellValueFactory(new PropertyValueFactory<Item, Integer>("item"));
qtyColumn.setCellValueFactory(new PropertyValueFactory<Item, String>("quantity"));
priceColumn.setCellValueFactory(new PropertyValueFactory<Item, Double>("price"));
orderTable.setItems(orderList);
}
在目前的形式中,您可能会得到这样的 table:
项目 -------- 数量 ----- 价格.
炒面 ----- 1 ---------- 4.20 .
泰式炒粉 ------ 1 ---------- 5.50 .
炒面 ----- 1 ---------- 4.20 .
泰式炒粉 ------ 1 ---------- 5.50.
但我要找的是 table 这样的:
项目 -------- 数量 ----- 价格.
炒面 ----- 1 ---------- 8.40 .
泰式炒河粉 ------ 1 ---------- 11.00。
扫描 table 的项目以查看是否存在现有项目:
public void addItem(String itemName, int quantity, Double price) {
Item entry = currentOrderTable.getItems().stream()
.filter(item -> item.getItem().equals(itemName))
.findAny()
.orElseGet(()-> {
Item newItem = new Item(itemName, 0, 0);
currentOrderTable.getItems().add(newItem);
return newItem ;
});
entry.setQuantity(entry.getQuantity() + quantity)
entry.setPrice(entry.getPrice() + price);
}