ListView未使用JavaFXML正确更新
在JavaFX中,我使用ListView显示添加到集合或从集合中移除的项目。我已经创建了一个ObserviceSet,与ListView一起使用以显示更新,但是当集合更改时,ListView没有正确更新。这是我的代码和解决方法。但是为什么它没有像预期的那样工作呢ListView未使用JavaFXML正确更新,java,listview,javafx,Java,Listview,Javafx,在JavaFX中,我使用ListView显示添加到集合或从集合中移除的项目。我已经创建了一个ObserviceSet,与ListView一起使用以显示更新,但是当集合更改时,ListView没有正确更新。这是我的代码和解决方法。但是为什么它没有像预期的那样工作呢 public class FXMLDocumentController implements Initializable { @FXML private ListView listView; Observable
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));
}
}
这是预期的行为。您调用的方法“创建一个新的可观察列表,并将[集合]的内容添加到其中”。因此,对集合的后续更改不会更改列表 另一个选项是只向可观察集注册侦听器,并通过适当地添加或删除元素来更新列表视图的项:
public class FXMLDocumentController implements Initializable {
@FXML
private ListView listView;
private ObservableSet<String> observableSet; //ObservableSet to prevent dublicates
private int i = 3;
@Override
public void initialize(URL url, ResourceBundle rb) {
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
observableSet = FXCollections.observableSet();
observableSet.addListener((SetChangeListener.Change<? extends String> c) -> {
if (c.wasAdded()) {
listView.getItems().add(c.getElementAdded());
}
if (c.wasRemoved()) {
listView.getItems().remove(c.getElementRemoved());
}
});
observableSet.addAll(Arrays.asList("Item1", "Item2", "Item3"));
}
@FXML
private void handleButtonAction(ActionEvent event) {
observableSet.add("Item" + i++);
}
@FXML
private void handleRemoveAction(ActionEvent event) {
observableSet.removeAll(listView.getSelectionModel().getSelectedItems());
}
}
公共类FXMLDocumentController实现可初始化{
@FXML
私有列表视图列表视图;
私有observeSet observeSet;//用于防止重复的observeSet
私人int i=3;
@凌驾
公共void初始化(URL、ResourceBundle rb){
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
ObservateSet=FXCollections.ObservateSet();
observableSet.addListener((SetChangeListener.Change尝试调用
listview.refresh();
从列表中添加和删除项目后
或者,您可以在列表中添加一个更改侦听器,并从中调用refresh方法。
但我更喜欢第一种方法,因为添加侦听器有时不会更新列表视图。有没有其他方法可以用来反映我对列表视图中的集合所做的更改?您好,我也有同样的问题,并且我的列表视图不会更新。下面的答案对我不起作用。您找到解决方案了吗?
listview.refresh();