2016-08-26 4 views
1

これは私が現在持っているものです。JavaFX TableView:列データを浮動小数点形式にしてソート可能で、フォーマットする/文字列として表示することはできますか?

fileSizeColumn.setCellValueFactory(cellData -> { 
     SimpleStringProperty stringProperty = new SimpleStringProperty(); 


     float sizeInMegabytes = (float)cellData.getValue().fileSizeProperty().getValue()/1024/1024; 
     sizeInMegabytes = round(sizeInMegabytes, 2); 

     stringProperty.setValue(sizeInMegabytes + "mb"); 
     return stringProperty; 
    }); 

    fileSizeColumn.setComparator((t1, t2) -> { 

     float f1 = Float.parseFloat(t1.replaceAll("[^0-9.]","")); 
     float f2 = Float.parseFloat(t2.replaceAll("[^0-9.]","")); 
     return Float.compare(f1,f2); 

    }); 

だから、もともとlong(それはバイト単位です)で、ファイルサイズのプロパティがあります。私のテーブルでこれを取得するには、メガバイトに変換し、2桁の小数点以下を丸めて、最後に"mb"を追加します。私は最後に"mb"を取り除くカスタムコンパレータを作った。私は最終的にこれはKBとGBのサイズに応じて、比較器clunky(endsWith("mb")endsWith("kb")これを行う場合、これを行う場合)を行います。

私はテーブルにlongをSimpleLongPropertyとして追加しますが、表示方法を何らかの形で示しています。

「ここでは、並べ替えに使用する必要がある実際の値の裏には値があり、これを数値で割り、最後に文字列「mb」を追加する必要がありますそれを実際に表示しているときは?

おかげで

答えて

2

通常、あなたはそれcellValueFactoryに元の形だと、データの表示方法をカスタマイズするcellFactoryを使用してTableCellをカスタマイズでデータを保持:

public static String fileSizeToText(long fileSize) { 
    return round(((float) fileSize)/1024/1024, 2) + "mb"; 
} 

... 

TableColumn<MyClass, Number> fileSizeColumn = ... 
fileSizeColumn.setCellValueFactory(cellData -> cellData.getValue().fileSizeProperty()); 
fileSizeColumn.setCellFactory(c -> new TableCell<MyClass, Number>() { 

    @Override 
    protected void updateItem(Number item, boolean empty) { 
     super.updateItem(item, empty); 
     if (empty || item == null) { 
      setText(null); 
     } else { 
      setText(fileSizeToText(item.longValue())); 
     } 
    } 

}); 

Comparatorが、この中で必要とされていますあなたのニーズに合った方法でLongComparableを実装しているからです。

+0

これはちょうど私がそれが働くことを期待した方法ですが、私は何とか最後のラップで間違っていました。あなたの答えをありがとう、それは今完全に働いている – trouserboycott

関連する問題