【问题标题】:JavaFX fill tableView with treeMap dataJavaFX 用 treeMap 数据填充 tableView
【发布时间】:2018-05-08 10:55:11
【问题描述】:

我有一个TableView 有两列,一个TreeMap<String, String> 和一个ObservableMap。我想用我的TreeMap 数据填充TableView。 但是tableview.setItems(observableMap) 不起作用,因为setItems 需要ObservableList。我对observableHashMap 进行了同样的尝试,但也没有用。我该怎么做才能用TreeMap 中的数据填充我的TableView

【问题讨论】:

  • 您需要ObservableList 而不是ObservableMap。只需使用类似FXCollections.observableArrayList(map.keySet()) 或类似的东西(不清楚Map 的哪一部分应该用作TableView 的项目)。如果需要根据observableMap的内容动态调整列表的内容,那就更复杂了……
  • 所以这意味着使用 FXCollections.observableArrayList(map.keySet()) 我只能用我的 treeMap 中的键填充我的 tableView?价值观呢?
  • 您想在一列中显示键,在另一列中显示关联的值,我猜?地图更新怎么样?在TableView中插入数据后是否可以修改地图或者这不是需要考虑的情况? (在这种情况下,添加/删除键是要考虑的最重要的部分。)
  • 否,TableView中的数据不能修改。是的,一列用于键,另一列用于值。

标签: javafx tableview treemap


【解决方案1】:

使用键作为TableView 的项目类型,使用cellValueFactory 作为值列来提取值:

Map<String, String> map = ...

TableView<String> tableView = new TableView();

// fill table with keys
tableView.getItems().addAll(map.keySet());

TableColumn<String, String> keyColumn = new TableColumn<>("key");
keyColumn.setCellValueFactory(cd -> new SimpleStringProperty(cd.getValue()));

TableColumn<String, String> valueColumn = new TableColumn<>("value");
valueColumn.setCellValueFactory(cd -> new SimpleStringProperty(map.get(cd.getValue())));

tableView.getColumns().addAll(keyColumn, valueColumn);

您也可以使用TableView&lt;Map.Entry&lt;String, String&gt;&gt;

...

// fill table with keys
tableView.getItems().addAll(map.entrySet());

TableColumn<Map.Entry<String, String>, String> keyColumn = new TableColumn<>("key");
keyColumn.setCellValueFactory(new PropertyValueFactory<>("key"));

TableColumn<Map.Entry<String, String>, String> valueColumn = new TableColumn<>("value");
valueColumn.setCellValueFactory(new PropertyValueFactory<>("value"));

...

【讨论】:

  • 我尝试了您的代码和两列:keyColumn 和 valueColumn 在 tableView 上创建但不幸的是内容仍然是空的。
  • @UmutFriusSavas 只要确保您在地图被填充后调用tableView.getItems().addAll(map.keySet())。如果它仍然无法正常工作,您可能在其他地方遇到了不相关的错误。
  • 这会导致表格没有观察到底层地图模型的变化 - 使用可观察的源很好地击败了 TableView 的观点。
猜你喜欢
  • 1970-01-01
  • 2014-10-08
  • 2018-10-14
  • 2013-06-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多