在TableView中显示DoubleProperty最多两个小数位

Mar*_*cin 1 java javafx

我有一个问题显示doubleProperty直到第二个小数.

粗略的布局如下所示:

public static void main(String[] args) {
    private TableView<myType> myTable;
    private TableColumn<myType, Double> myCol;

public class myObject {
    .....
    DoubleProperty myDouble;
    ....

    public doubleProperty getPropertyMyDouble() {
        return myDouble;
    }

    public void setMyDouble(double d) {
        myDouble.set(d)
    }
}
Run Code Online (Sandbox Code Playgroud)

我填写专栏:

   ...
   myCol.setCellValueFactory(cellData ->cellData.getValue().getPropertyMyDouble().asObject());
   ...
Run Code Online (Sandbox Code Playgroud)

现在我的问题是这样的:如果我按原样离开setMyDouble方法,myCol则会出现带有大量小数的数字.我只想要小二进制.

我尝试做的是这样的:

public void setMyDouble(double d) {
        BigDecimal bd = new SimpleDecimalFormat("#.00")
        myDouble.set(Double.parseDouble(bd.format(d));
    }
Run Code Online (Sandbox Code Playgroud)

现在这适用于删除第二个小数后的数字,但问题是,如果我有类似12.00的东西,因为我需要在结尾处转换为double(因为.set()需要一个双倍),它将12.00变成12.0.但是,我需要一直保留两位小数.

有没有办法让myDouble一个DoubleProperty(我这样做,因为它使修改后更容易自动更新表),但目前的数据作为"#.##"格式?

我在考虑做一些像添加实例变量的事情:

StringProperty myDoublePresent;
Run Code Online (Sandbox Code Playgroud)

myDouble它只需要把它变成一个字符串,然后以"#.##"格式出现.

但我更喜欢一种方法,我可以直接使用 DoubleProperty.

Ulu*_*Biy 6

尝试

myCol.setCellValueFactory(cellData ->
     Bindings.format("%.2f", cellData.getValue().getPropertyMyDouble()));
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,但如果你需要在表列中保持双倍,你应该使用cellfactory而不是cellvaluefactory.并在自定义表格单元格中进行格式化. (2认同)
  • 我强烈建议保持数据类型不变,并使用`cellFactory`来改变它的显示方式. (2认同)