我可以实现自定义表格单元格,它适用于tableview Javafx中的不同列类型

时间:2016-04-03 10:01:21

标签: tableview javafx-8

我有一个包含大约18列不同数据类型的tableview,我是否可以定义一个可以处理所有这些数据类型的自定义表格单元格所以我可以将所有这些列的单元格工厂设置为此自定义表格单元格。

1 个答案:

答案 0 :(得分:0)

如果您只显示文字,可以执行以下操作:

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(...)方法添加更多功能。)

现在你可以做像

这样的事情
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())));

或者,如果它足以使用每个的默认行为,

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