我有一个包含大约18列不同数据类型的tableview,我是否可以定义一个可以处理所有这些数据类型的自定义表格单元格所以我可以将所有这些列的单元格工厂设置为此自定义表格单元格。
答案 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<>()));