更改textField w.r.t列中的值可编辑列

时间:2013-11-27 10:20:59

标签: javafx tableview

我有一个表格,其中有一个可编辑的数量列,价格的值取决于用户输入的数量。该表的快照如下:

enter image description here

此处,价格仅为1个数量。我希望价格在用户更改数量时自动更改。我读了有关绑定并尝试过它们,但未能成功实现它们。我不知道正确的方法。

3 个答案:

答案 0 :(得分:2)

您可以将总数绑定到数量*价格

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
}

以同样的方式,如果您只想听qty更改,可以在LineItem构造函数中添加一个侦听器而不是绑定。

qty.addListener(new ChangeListener<Number>() {
   @Override
   public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
       total.set(price.get()*qty.get());
   }
});

您的表格应使用ObIableList of LineItem

ObservableList<LineItem> lines = FXCollections.observableArrayList();
TableView table = new TableView(lines);

这样当底层列表发生变化时,表也会发生变化。

答案 1 :(得分:1)

一旦用户提交了更改并使用它来更新表,就可以使用TableColumn的onEditCommit()来检索值。

首先需要设置监听器。请查看文档:{​​{3}}

从文档更新:

  

因为ObservableList对象可以跟踪任何更改   对于其元素,TableView内容随时会自动更新   数据发生了变化。

答案 2 :(得分:0)

您可以使用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);
    });

每次更改数量时,都会刷新您的表格。