【发布时间】:2019-04-23 11:08:33
【问题描述】:
我的 Java 程序生成大量数据,我用这些数据构造了单独的 ResultObject。因为只有某些 ResultsObjects 会感兴趣,所以我用我的结果填充了 ObservableHashMap。 CustomObject 由几个整数 + 双精度和一个 JSONObject 组成。有了这个CustomObject,我想将类似的ResultObjects(具有某些共同属性)映射到那个CustomObject。
虽然映射和处理这些结果按预期工作,但我几乎无法使用 ObservableHashMap 填充 TableView。
我的CustomObject(JSONObject只是为了检查,如果两个CustomObjects具有相同的属性):
public CustomObject(Simulation data) {
this.datapoint1 = data.datapoint1;
this.datapoint2 = data.datapoint2;
this.jsonCompareObject = new JSONObject()
.put("datapoint1", data.datapoint1)
.put("datapoint1", data.datapoint2);
}
我的 ObservableHashMap 对象:
private ObservableMap <CustomObject, ObservableList<Simulation>> topResultsList;
public SomeObjectWithObservableMap(){
this.topResultsList = FXCollections.observableHashMap();
}
通过使用以下代码,我检查是否有一个具有相应数据点的键已经存在,然后添加到其 ObservableList (Value):
private boolean isKeyPresent(CustomObject newCustomObject, Simulation data) {
for (CustomObject oldCustomObject : this.topResultsList.keySet()) {
if (oldCustomObject.jsonCompareObject.toString().equals(newCustomObject.jsonCompareObject.toString())) {
this.topResultsList.get(oldCustomObject).add(data);
return true;
}
}
return false;
}
我像这样填充其他一些 TableView:
{
tableColumn.setCellValueFactory(new PropertyValueFactory<>("datapoint1"));
tableColumn.setCellFactory(TextFieldTableCell.<SomeObject, Double>forTableColumn(twoDigits));
tableView.setItems(someObject.getObservableList());
}
最后我想要一些 TableColumns 来显示来自 CustomObject 的属性。稍后,我希望将所选 CustomObject 的各个映射 ObservableLists 显示在单独的 TableView 中。
我对 Java 和 JavaFX 还很陌生,我希望尽可能专业地描述我的问题。如果我遗漏了什么,请告诉我。
【问题讨论】:
-
由于您无法使用 Map 支持 TableView,您是否尝试过使用 Map 的 keySet 支持的 ObservableList 作为您的 TableView 项目?您应该能够监听可观察地图的更改,然后 a) 整体销售更新 TableView 项目或 b) 动态添加/删除地图中更新的条目。
标签: java javafx hashmap tableview tablecolumn