【发布时间】:2017-10-02 03:31:08
【问题描述】:
在 JavaFX 中,我使用 ListView 来显示添加到集合或从集合中移除的项目。我已经制作了一个 observableSet 与 ListView 一起使用来显示更新,但是当 Set 更改时 ListView 没有正确更新。这是我的代码和解决方法。但为什么它没有按预期工作?
public class FXMLDocumentController implements Initializable {
@FXML
private ListView listView;
ObservableSet<String> observableSet; //ObservableSet to prevent dublicates
Integer i = 3;
@Override
public void initialize(URL url, ResourceBundle rb) {
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
observableSet = FXCollections.observableSet();
observableSet.addAll(Arrays.asList("Item1", "Item2", "Item3"));
//Setting up ListView to the ObservableSet
listView.setItems(FXCollections.observableArrayList(observableSet));
}
@FXML
private void handleButtonAction(ActionEvent event) {
observableSet.add("Item" + i++);
//Setting up ListView to the ObservableSet otherwise it won't update
//My understanding that I don't have to do this with an observableSet
listView.setItems(FXCollections.observableArrayList(observableSet));
}
@FXML
private void handleRemoveAction(ActionEvent event) {
observableSet.removeAll(listView.getSelectionModel().getSelectedItems());
//Setting up ListView to the ObservableSet otherwise it won't update
listView.setItems(FXCollections.observableArrayList(observableSet));
}
}
问题: 每次更新 observableSet 时,我都必须按照上面和下面的说明继续设置 ListView。否则更改不会显示在 ListView 中。
listView.setItems(FXCollections.observableArrayList(observableSet));
【问题讨论】:
-
还有其他方法可以用来反映我对 ListView 中的 Set 所做的更改吗?
-
嗨,我有同样的问题,我的列表视图没有更新。下面的2个答案对我不起作用。你找到解决办法了吗?