2013-11-27 22 views
1

我有一個表格,其中有一個可編輯的數量列,價格的值取決於用戶輸入的數量。表的快照如下:更改textField列中的值w.r.t一個可編輯的列

enter image description here

在這裏,價格只是1數量。我希望價格在用戶更改數量時自動更改。我閱讀了有關綁定並嘗試了這些綁定,但未能成功實施它們。我不知道正確的方法。

回答

1

您可以使用TableColumn的onEditCommit()在用戶提交其更改並使用它更新您的表後更新該值。

您首先需要設置偵聽器。看一看文檔:http://docs.oracle.com/javafx/2/api/javafx/scene/control/TableColumn.html

更新從文檔:

因爲ObservableList對象使任何變化 其元素的跟蹤中,TableView中的內容自動更新每當 數據的變化。

+0

我已經嘗試過更新字段的值,但它在列表中得到更新並且不在表中顯示。 – ItachiUchiha

+0

http://docs.oracle.com/javafx/2/ui_controls/table-view.htm有我猜的答案 –

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 
} 

以同樣的方式,如果你只是想聽聽數量改變了你可以在構造函數中的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當底層表更改表也改變了方式進行。

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

這將刷新你的表每次更改數量的時間。

相關問題