JavaFx中TableView 的列中的資料進行自定義顯示的問題
阿新 • • 發佈:2019-02-07
假設條件
- TableView 有一列的繫結資料型別為DoubleProperty.但是你想要將其進行格式轉換,比如一個檔案的大小你將其存為 double 的型別,然後現在要變成 KB(B,MB…)這種型別,那麼你就可以這樣做. 2.
//columnSize 為 tableView 中的一列
columnSize.setCellValueFactory(
new Callback<TableColumn.CellDataFeatures<Album, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<Album, String> param) {
// TODO Auto-generated method stub
return Bindings.createStringBinding(new Callable<String>() {
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
return DataUtil.convertSizeToString(param.getValue().getSize());
}
}, param.getValue().sizeProperty());
}
});
- Album 是一個自定義型別.這裡我只給出 sizeProperty 的相關程式碼.如果你有其他型別的資料需要轉換,實現過程是一樣的.下面這個是可以通過在 ecplise 中右鍵自動生成的,不過前提是你先定義了 size 這個 property(一定要是 beans 中的型別 或者你繼承生成的,常用的有 simplexxxProperty.)
public class Album {
/**
* 記錄相簿所佔用的空間大小
*/
private SimpleDoubleProperty size = new SimpleDoubleProperty(this, "size");
public Double getSize() {
return size.get();
}
public void setSize(Double size) {
this.size.set(size);
}
public DoubleProperty sizeProperty() {
return size;
}
}
總結
- 這樣就解決了我們需要資料的格式轉換的問題.實際上我們這裡做的是 DoubleProerty 向 Stringproperty 的轉換,換做其他兩種型別的轉換也是類似的.
- 最重要的方法是 Bindings.createXXXBinding,能夠建立不同型別的 property 之間的聯絡.