Dans JavaFX, j'utilise ListView pour afficher les éléments ajoutés ou supprimés d'un ensemble. J'ai fait un observableSet à utiliser avec ListView pour afficher les mises à jour mais le ListView ne se met pas à jour correctement lorsque le Set change. Voici mon code avec un travail autour. Mais pourquoi ça ne marche pas comme prévu?ListView ne se met pas correctement à jour avec JavaFX FXML
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));
}
}
La question: Je dois garder la mise en place du ListView comme démontré ci-dessus et au-dessous chaque fois que le observableSet est mis à jour. Sinon, la modification n'apparaîtra pas dans ListView.
listView.setItems(FXCollections.observableArrayList(observableSet));
Existe-t-il un autre moyen de répercuter les modifications apportées à l'ensemble dans ListView? – Moe