在JavaFX中使用复选框筛选ObservableList
我正在用JavaFX作为一个辅助项目构建一个日志读取器,当我试图在在JavaFX中使用复选框筛选ObservableList,java,javafx,observablelist,Java,Javafx,Observablelist,我正在用JavaFX作为一个辅助项目构建一个日志读取器,当我试图在TableView上实现过滤时,我已经陷入了死胡同 我所拥有的是一些复选框es(图片的左侧),它们基本上充当表格视图将显示的内容的过滤器: 单击Submit按钮后,将打开一个后台线程来读取和解析文件。一旦操作终止,每次日志读取的结果将插入全局可观察列表中: logTable.setItems(logTable.getItems().filtered(log -> !log.getSource().equals(checkB
TableView
上实现过滤时,我已经陷入了死胡同
我所拥有的是一些复选框
es(图片的左侧),它们基本上充当表格视图
将显示的内容的过滤器:
单击Submit
按钮后,将打开一个后台线程来读取和解析文件。一旦操作终止,每次日志读取的结果将插入全局可观察列表中:
logTable.setItems(logTable.getItems().filtered(log -> !log.getSource().equals(checkBox.getText())));
您可以使用JavaFX,它接受。您可以更新每个过滤器上的谓词,并根据需要组合它们
FilteredList<LogTest> items = new FilteredList<>(originalItems);
tableView.setItems(items);
... on update of filter UI items
Predicate<LogTest> containsFoo = i -> i.getName().contains("foo");
Predicate<LogTest> isSevere = i -> i.getLevel() == Level.SEVERE;
Predicate<LogTest> filter = containsFoo.or(isSevere);
items.setPredicate(filter);
使用FilteredList
无需重新读取日志记录,因为过滤器会立即应用于现有项目
FilteredList<LogTest> items = new FilteredList<>(originalItems);
tableView.setItems(items);
... on update of filter UI items
Predicate<LogTest> containsFoo = i -> i.getName().contains("foo");
Predicate<LogTest> isSevere = i -> i.getLevel() == Level.SEVERE;
Predicate<LogTest> filter = containsFoo.or(isSevere);
items.setPredicate(filter);
items.setPredicate(null);