我有一個表格,其中有一個可編輯的數量列,價格的值取決於用戶輸入的數量。表的快照如下:更改textField列中的值w.r.t一個可編輯的列
在這裏,價格只是1數量。我希望價格在用戶更改數量時自動更改。我閱讀了有關綁定並嘗試了這些綁定,但未能成功實施它們。我不知道正確的方法。
我有一個表格,其中有一個可編輯的數量列,價格的值取決於用戶輸入的數量。表的快照如下:更改textField列中的值w.r.t一個可編輯的列
在這裏,價格只是1數量。我希望價格在用戶更改數量時自動更改。我閱讀了有關綁定並嘗試了這些綁定,但未能成功實施它們。我不知道正確的方法。
您可以使用TableColumn的onEditCommit()
在用戶提交其更改並使用它更新您的表後更新該值。
您首先需要設置偵聽器。看一看文檔:http://docs.oracle.com/javafx/2/api/javafx/scene/control/TableColumn.html
更新從文檔:
因爲ObservableList對象使任何變化 其元素的跟蹤中,TableView中的內容自動更新每當 數據的變化。
可以將總結合數量*價格
public class LineItem {
private final SimpleDoubleProperty price = new SimpleDoubleProperty();
private final SimpleIntegerProperty qty = new SimpleIntegerProperty();
private final SimpleDoubleProperty total = new SimpleDoubleProperty();
public LineItem() {
DoubleBinding db = new DoubleBinding() {
{
super.bind(price, qty);
}
@Override
protected double computeValue() {
return (price.get() * qty.get());
}
};
total.bind(db);
}
//important! add getters and setters
}
以同樣的方式,如果你只是想聽聽數量改變了你可以在構造函數中的LineItem添加一個偵聽器,而不是具有約束力。
qty.addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
total.set(price.get()*qty.get());
}
});
你的表應與LineItem
ObservableList<LineItem> lines = FXCollections.observableArrayList();
TableView table = new TableView(lines);
的ObservableList當底層表更改表也改變了方式進行。
您可以使用onEditCommit如圖
quantity.setOnEditCommit((evt) -> {
evt.getRowValue().setQuantity(evt.getNewValue());
int quanity = evt.getNewValue();
int costPrice = evt.getRowValue().getCostPrice();
int price = cosePrice * quantity
evt.getRowValue().setPrice(price);
tableView.getColumns().get(0).setVisible(false);
tableView.getColumns().get(0).setVisible(true);
});
這將刷新你的表每次更改數量的時間。
我已經嘗試過更新字段的值,但它在列表中得到更新並且不在表中顯示。 – ItachiUchiha
http://docs.oracle.com/javafx/2/ui_controls/table-view.htm有我猜的答案 –