当前位置: 首页 > 知识库问答 >
问题:

在javafx中从ObservableList中删除

经俊茂
2023-03-14

我有两个ObservableList,其中一个包含一些歌曲,另一个包含与歌曲相关的目录。

我希望当从它的ObservableList中删除一个目录时,所有包含该目录的歌曲都从它们的ObservableList中删除。但是当我这样做的时候,只有带奇数id的歌曲被移除,带偶数id的仍然存在!!!

我的ObservableLists在另一个类中,“Controller”是包含ObservableLists的类的对象。下面是我的代码:

private static ObservableList<SongModel> songModelObservableList = FXCollections.observableArrayList();
private static ObservableList<Directory_Model> directoryModelObservableList = FXCollections.observableArrayList();

现在是我删除目录的代码

for (int j = 0 ; j < controller.getSongModelObservableList().size() ; j++)
   if (controller.getSongModelObservableList().get(j).getPath().contains(controller.getDirectoryModelObservableList().get(i).getPath())){
         controller.getSongModelObservableList().remove(controller.getSongModelObservableList().get(j));

          }
    controller.getDirectoryModelObservableList().remove(controller.getDirectoryModelObservableList().get(i));

这里。在第一个if中,我检查哪个songModel(我的歌曲类)有目录的路径,以便将其从SongObServableList中删除。

有什么办法可以解决吗?我想删除所有目录的歌曲,而不是带有奇数ID的。

共有1个答案

鲁弘厚
2023-03-14

如果从列表中删除indexj处的元素,则修改后位置j处的项就是以前在indexj+1处的项。由于您在循环的每次迭代之后都会增加索引,因此如果在迭代中移除一个项,则会跳过该项。如果未删除任何项,则只增加索引:

final String removePath = controller.getDirectoryModelObservableList().get(i).getPath();
for (int j = 0; j < controller.getSongModelObservableList().size();)
   if (controller.getSongModelObservableList().get(j).getPath().contains(removePath)){
       controller.getSongModelObservableList().remove(j);
   } else {
       j++;
   }
}
controller.getDirectoryModelObservableList().remove(i);

不过,简单地将谓词removeif一起使用会更简单:

final String removePath = controller.getDirectoryModelObservableList().get(i).getPath();
controller.getSongModelObservableList().removeIf(element -> element.getPath().contains(removePath));
 类似资料:
  • 我在JavaFx应用程序中有一个名为choiceBoxPizza的ChoiceBox。 在我的控制器中,我声明它: 我包含一些测试数据的函数是: 所以应该用填充。奇怪的是,我没有得到任何异常,并且选择框在调用方法后仍然为空。 我的逻辑有错误吗?

  • 任何帮助都将不胜感激!提前感谢!

  • 我是javafx新手,正在尝试在textflow中显示大量文本。它显示得很好,但我就是不知道如何删除文本。 所以我要做的是像这样从textFlow中删除所有文本节点 但当我这样做并向textFlow添加一些内容时,它会显示在已经显示的文本之后。我想删除那里的文本,并显示从文本流开始添加的文本。 我想我必须以某种方式重新呈现textflow的视图,但我不知道怎么做。那么如何删除所有内容并重新添加文本

  • 我有一个TableView(javafx.scene.control.TableView),我用数据填充了它。该数据作为ArrayList从数据库中检索,因此我使用了folowing流: 我用预算数据填充ArrayList 我更新数组中的值 初始数据显示正确。我原本期望通过更改ArrayList(最后一步),ObservableList会看到更改并将其传递给我的TableView。为了使数组中的更

  • 所以我是JavaFX的新手,我正在尝试为学校做一个应用程序,我已经阅读了很多相关的帖子,但我似乎不知道如何为我自己的案例做。这是一张照片 因此,大屏幕是我的主屏幕,带有红色边框的是Vbox的子屏幕。对于孩子,我有一个单独的FXML和一个控制器。当我点击“成交”按钮时,我想删除Vbox的特定子级。 我知道我应该做parent.get孩子()。删除(specific_child_node);问题是我不

  • 我创建了一个由HBox、按钮和标签组成的数组。每次按下“添加”按钮,我都会设置: