1. 程式人生 > >JavaFx中TableView 的列中的資料進行自定義顯示的問題

JavaFx中TableView 的列中的資料進行自定義顯示的問題

假設條件

  1. TableView 有一列的繫結資料型別為DoubleProperty.但是你想要將其進行格式轉換,比如一個檔案的大小你將其存為 double 的型別,然後現在要變成 KB(B,MB…)這種型別,那麼你就可以這樣做.
  2. 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()); } });
  1. 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;
    }


}

總結

  1. 這樣就解決了我們需要資料的格式轉換的問題.實際上我們這裡做的是 DoubleProerty 向 Stringproperty 的轉換,換做其他兩種型別的轉換也是類似的.
  2. 最重要的方法是 Bindings.createXXXBinding,能夠建立不同型別的 property 之間的聯絡.