我有一个名为" Product"的课程,有双重属性"价格"。我在表格视图中的表格列上显示它,但我想显示格式化的价格 - " US $ 20.00"而不只是" 20.00"。
这是填充表格视图的代码:
priceProductColumn.setCellValueFactory(cellData -> cellData.getValue().priceProperty());
我尝试了所有方法:将返回的值转换为字符串,使用priceProperty具有的方法toString等,但似乎不起作用。
我是否需要绑定类似的事件?
答案 0 :(得分:4)
使用cellValueFactory
确定显示的数据。单元格值工厂基本上是一个函数,它接受CellDataFeatures
对象并返回ObservableValue
包装要在表格单元格中显示的值。您通常希望在getValue()
对象上调用CellDataFeatures
来获取行的值,然后从中检索属性,就像在发布的代码中一样。
使用cellFactory
确定如何显示这些数据。 cellFactory
是一个函数,它接受TableColumn
(您通常不需要)并返回TableCell
个对象。通常,您返回TableCell
的子类,该子类将覆盖updateItem()
方法,以根据单元格显示的新值设置单元格的文本(有时是图形)。在您的情况下,您将价格定为Number
,只需根据需要对其进行格式化,并将格式化的值传递给单元格的setText(...)
方法。
值得阅读相关的Javadocs:TableColumn.cellFactoryProperty()
,以及Cell
,以便对细胞和细胞工厂进行一般性讨论。
priceProductColumn.setCellValueFactory(cellData -> cellData.getValue().priceProperty());
priceProductColumn.setCellFactory(col ->
new TableCell<Product, Number>() {
@Override
public void updateItem(Number price, boolean empty) {
super.updateItem(price, empty);
if (empty) {
setText(null);
} else {
setText(String.format("US$%.2f", price.doubleValue()));
}
}
});
(我假设priceProductColumn
是TableColumn<Product, Number>
而Product.priceProperty()
返回DoubleProperty
。)
答案 1 :(得分:0)
如果还没有,请与@James_D一起阅读。