2016-04-03 11 views
0

異なるカラムタイプに適したカスタマイズされたテーブルセルを実装できますか?私はこれらのデータタイプを扱うことができるカスタマイズされたテーブルセルを定義することはできますか?これらすべての列のセルファクトリをこのカスタマイズされたテーブルセルに設定できます。私はテーブルビューJavafx

public class SimpleTextCell<S,T> extends TableCell<S ,T> { 

    private final Function<T,String> textExtractor ; 

    public SimpleTextCell(Function<T, String> textExtractor) { 
     this.textExtractor = textExtractor ; 
    } 

    public SimpleTextCell() { 
     this(T::toString); 
    } 

    @Override 
    protected void updateItem(T item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? null : textExtractor.apply(item)); 
    } 
} 

を(し、必要に応じて、あなたはupdateItem(...)方法に多くの機能を追加することができます):

答えて

0

テキストのみを表示している場合は、このような何かを行うことができます。

今、あなたは

TableColumn<Item, String> someStringColumn = new TableColumn<>(); 
someStringColumn.setCellFactory(tc -> new SimpleTextCell<>()); 

TableColumn<Item, Double> someDoubleColumn = new TableColumn<>(); 
someDoubleColumn.setCellFactory(tc -> 
    new SimpleTextCell<>(d -> String.format("%.3f", d.doubleValue()))); 

か、それが各1のデフォルトの動作を使用するのに十分だ場合、

TableColumn<Item, String> someStringColumn = new TableColumn<>(); 
TableColumn<Item, Double> someDoubleColumn = new TableColumn<>(); 

TableView<Item> table = new TableView<>(); 
table.getColumns().add(someStringColumn); 
table.getColumns().add(someDoubleColumn); 

table.getColumns().forEach(col -> col.setCellFactory(tc -> new SimpleTextCell<>())); 
+0

ありがとう@James_Dのようなものを行うことができますが、どのように私はのタイプを検出することができます実行時に2番目のパラメータを使用して、テーブルビューのすべての列に対してforループを作成し、それらに同じTableCell、TableColumn someStringColumn = new TableColumn <>()を割り当てたいとします。 someStringColumn.setCellFactory(tc - >新しいSimpleTextCell ()); updateItemメソッド内でString DataTypeを使用していることを検出するにはどうすればよいですか – ManKeer

+0

タイプ消去のため、実行時にテーブル列のパラメータ化された型を動的にチェックすることはできません。あなたがここで何をしたいのかははっきりしていません。異なる表の列タイプに対して異なる動作が必要な場合は、本当に同じテーブル・セルの実装を全く使用していません。 (もちろん、 'updateItem()'メソッドの中で 'instanceof'テストを行うこともできますが、それはかなり醜いでしょう)。カラムを作成するときにおそらくテーブルのカラムの型を知っているので、それで? –

+0

この点を明確にしていただきありがとうございます。 – ManKeer

関連する問題