2016-12-10 1 views
1

TableViewに表示されているObservableListに項目を追加すると、重複した項目が追加されたときにどのように行を更新できますか?重複した項目が追加されたときに、どのように(新しい行を追加するのではなく)行を更新しますか? [JavaFX]

アイテム、数量、価格の3つの列を持つ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); 
} 

、あなたはこのようなテーブルで終わる可能性:

項目 --------- ----- 価格
チョウミン----- 1 ----------- 4.20。
パッドタイ語-------- 1 ----------- 5.50。
チョウミン----- 1 ----------- 4.20。
パッドタイ語-------- 1 ----------- 5.50。

項目 --------- ----- 価格

は、しかし、私が探しています、このようなテーブルです。
チョウミン----- 1 ----------- 8.40。
パッドタイ-------- 1 ---------- 11.00。テーブルの項目を通じて

答えて

0

スキャン既存のアイテムがあるかどうかを確認するには:

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); 


} 
+0

これは素晴らしいです。どうもありがとう。 – mrchimpbanana

関連する問題