JavaFx在表列上使用String with Double

时间:2014-11-25 02:42:41

标签: java javafx javafx-8

我有一个名为" Product"的课程,有双重属性"价格"。我在表格视图中的表格列上显示它,但我想显示格式化的价格 - " US $ 20.00"而不只是" 20.00"。

这是填充表格视图的代码:

priceProductColumn.setCellValueFactory(cellData -> cellData.getValue().priceProperty());

我尝试了所有方法:将返回的值转换为字符串,使用priceProperty具有的方法toString等,但似乎不起作用。

我是否需要绑定类似的事件?

2 个答案:

答案 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()));
            }
        }
    });

(我假设priceProductColumnTableColumn<Product, Number>Product.priceProperty()返回DoubleProperty。)

答案 1 :(得分:0)

如果还没有,请与@James_D一起阅读。

https://docs.oracle.com/javafx/2/ui_controls/table-view.htm