如何将地图列表设置为 javafx table 视图

How to set list of map into javafx table view

以下代码片段显示了字段的声明以及我如何设置 table。

请告诉我哪里出了问题。数据未显示。

@FXML
private TableColumn<Map<String, Object>, String> productNameCol ;

@FXML
private TableColumn<Map<String,Object>, String> requestedBarcodeCol;

@FXML
private TableColumn<Map<String,Object>, String> pickedBarcodeCol;
productNameCol.setCellValueFactory(new PropertyValueFactory<Map<String,Object>,String>("ProductName"));
requestedBarcodeCol.setCellValueFactory(new PropertyValueFactory<Map<String,Object>,String>("ActualBarcode"));
pickedBarcodeCol.setCellValueFactory(new PropertyValueFactory<Map<String,Object>,String>("PickedBarcode"));
requestedQuantityCol.setCellValueFactory(new PropertyValueFactory<Map<String,Object>,String>("ActualQuantity"));
actualQuantityCol.setCellValueFactory(new PropertyValueFactory<Map<String,Object>,String>("PickedQuantity"));


unMatchDataTableView.setItems(FXCollections.observableArrayList(unmatchedBarcodeMap));

由于问题不包含 MCVE,我必须做出一些假设;如果不进行修改,我提出的解决方案可能无法工作。这些是我的假设:

  • unmatchedBarcodeMap 非空
  • 加载fxml时正确使用控制器
  • 这些字段包含在屏幕上显示的 TableView 中使用的实例

PropertyValueFactory 使用 getter 或 属性 getter 来检索值。这些不适用于 Map:

<property> 表示传递给 PropertyValueFactory<Property> 的字符串是相同的字符串,但第一个字符转换为大写:

PropertyValueFactory 查找名为 <property>Property 的方法,该方法 returns 一个 ObservableValue 包含要首先显示在列中的值。如果存在这样的方法,则从 call 方法返回对行项调用该方法的结果。如果此方法不可用,PropertyValueFactory 将查找名为 get<Property> 的方法;如果此方法可用,则为行项调用该方法的结果将包装在 ObservableValue 对象中并从 call 方法返回。否则返回 null 导致单元格为空。

您需要使用 MapValueFactory 而不是 PropertyValueFactoryMap 中检索值:

productNameCol.setCellValueFactory((Callback) new MapValueFactory("ProductName"));
...

这显示在 productNameCol 列中使用 rowItem.get("ProductName") 调用的结果。