如何将地图列表设置为 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
而不是 PropertyValueFactory
从 Map
中检索值:
productNameCol.setCellValueFactory((Callback) new MapValueFactory("ProductName"));
...
这显示在 productNameCol
列中使用 rowItem.get("ProductName")
调用的结果。
以下代码片段显示了字段的声明以及我如何设置 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
而不是 PropertyValueFactory
从 Map
中检索值:
productNameCol.setCellValueFactory((Callback) new MapValueFactory("ProductName"));
...
这显示在 productNameCol
列中使用 rowItem.get("ProductName")
调用的结果。