看,我只想对 ListView 进行排序并允许添加/删除。 我在这方面不是最擅长的,但这似乎比应有的要困难得多。 如果重要的话,存储的数据只是一条记录,其中有一些文本要显示在 ListView 中,而其他一些文本在 ListView 中选择时会显示在单独的框中。
默认情况下,集合未排序且不允许删除。
我试过这个:
tables = FXCollections.observableArrayList();
SortedList<TableData> sortedTables = new SortedList<>(tables);
sortedTables.setComparator(TableData.getComparator());
tableList = new ListView<>(sortedTables);
我有
tables.remove(currentData);
抛出 java.lang.UnsupportedOperationException。
我尝试删除 SortedList,但没有帮助。
我以为 Observable 的 ArrayList 版本允许删除,但显然不允许。 我是不是在做蠢事? 也许我可以以某种方式使用 ObservableSet 或 ObservableMap,但我不明白为什么我所拥有的不起作用。
基本上,问题在于
SortedList
超类 AbstractList
通过抛出 remove
来实现方法 UnsupportedOperationException
,而 FXCollections.observableArrayList()
返回的列表正确实现方法 remove
,即从列表中删除元素。
您只需要探索
SortedList
和 FXCollections
的类层次结构的源代码。