Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaFX设置表中语言环境的小数分隔符_Java_Javafx - Fatal编程技术网

如何使用JavaFX设置表中语言环境的小数分隔符

如何使用JavaFX设置表中语言环境的小数分隔符,java,javafx,Java,Javafx,我正在写一个解决背包问题的程序。我有几个解决这个问题的类打包到一个.jar中,我必须在另一个项目中使用这个.jar。其中一个类名为Item,由3个字段定义:String name、int-weight和double-value,另一个类返回所有这些项的列表。我要做的是在表中显示带有分隔符的值,分隔符的设置取决于Locale.getDefault。一旦它是一个。有一次,。我尝试的是tableColumnItemsValue.setCellValueFactorypvt;其中,pvt是设置小数分隔符

我正在写一个解决背包问题的程序。我有几个解决这个问题的类打包到一个.jar中,我必须在另一个项目中使用这个.jar。其中一个类名为Item,由3个字段定义:String name、int-weight和double-value,另一个类返回所有这些项的列表。我要做的是在表中显示带有分隔符的值,分隔符的设置取决于Locale.getDefault。一旦它是一个。有一次,。我尝试的是tableColumnItemsValue.setCellValueFactorypvt;其中,pvt是设置小数分隔符的东西。然后我试着:

PropertyValueFactory pvt = new PropertyValueFactory("value").call(new DecimalFormatSymbols(Locale.getDefault()).getDecimalSeparator());
当然,它不起作用,因为我正在将字符返回到PropertyValueFactory。我不知道怎么做

这是我开始工作之前的代码:

    listProperty = new SimpleListProperty<>();
    observableListOfItems = FXCollections.observableArrayList(listOfItems);
    listProperty.set(observableListOfItems);
    tableView.setItems(observableListOfItems);
    tableView.itemsProperty().bindBidirectional(listProperty);

    tableColumnItemsName.setCellValueFactory(new PropertyValueFactory<>("name"));
    tableColumnItemsWeight.setCellValueFactory(new PropertyValueFactory<>("weight"));
    tableColumnItemsValue.setCellValueFactory(new PropertyValueFactory<>("value"));

你能帮忙吗?

好的,我的问题解决了。如果有人有类似的问题,这里有一个解决方案:

tableColumnItemsValue.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Item, String>, ObservableValue<String>>() {
    @Override
    public ObservableValue<String> call(TableColumn.CellDataFeatures<Item, String> param) {
        double value = param.getValue().getItemValue();
        DecimalFormat df = new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.getDefault()));
        return new SimpleStringProperty(df.format(value));
    }
});

您需要自定义cellfactory而不是cellValueFactory!这将文本配置为一个数字格式,这是错误的,不是我在评论中建议的;cellValueFactory用于在您的上下文中提供可观察的数据值作为DoubleProperty,cellFactory用于通过格式化该值来配置该值的可视表示形式f.i。