2016-12-10 3 views
1

Wenn Sie ein Objekt zu einer ObservableList hinzufügen, die in einer TableView angezeigt wird, wie können Sie eine Zeile aktualisieren, wenn ein doppeltes Element hinzugefügt wird?Wie aktualisieren Sie eine Zeile (anstatt eine neue Zeile hinzuzufügen) in einer TableView, wenn doppelte Elemente hinzugefügt werden? [JavaFX]

z.B. Betrachten Sie eine TableView mit drei Spalten: Artikel, Menge und Preis. Dies könnte mit dem folgenden Code erreicht werden:

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

In seiner jetzigen Form, Sie mit einer Tabelle am Ende wie folgt könnten:

Artikel --------- Menge ----- Preis.
Chow Mein ----- 1 ----------- 4.20.
Pad Thai -------- 1 ----------- 5.50.
Chow Mein ----- 1 ----------- 4.20.
Pad Thai -------- 1 ----------- 5.50.

Aber was ich suche ist eine Tabelle wie folgt aus:

Artikel --------- Menge ----- Preis.
Chow Mein ----- 1 ----------- 8.40.
Pad Thai -------- 1 ---------- 11.00.

Antwort

0

Scan durch die Elemente der Tabelle zu sehen, ob es ein vorhandenes Element ist:

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

Das ist großartig. Vielen Dank. – mrchimpbanana

Verwandte Themen