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

在JavaFX中使用复选框过滤可观察列表

闻人举
2023-03-14

我正在用JavaFX作为辅助项目构建一个日志阅读器,当我试图在TableView上实现过滤时,我走到了死胡同。

我有几个< code >复选框(图片的LHS ),它们基本上充当< code>TableView将显示的内容的过滤器:

单击Submit按钮后,将打开一个后台线程来读取和分析文件。一旦操作终止,每次读取日志的结果都会插入全局ObservableList

 public class Test_Filters extends Application {...

 private ObservableList<LogTest> logs = FXCollections.observableArrayList();

...}

我遇到的问题是如何处理:

    < li >勾选多个过滤器< code >复选框的情况。 < li >未选中< code >复选框的情况。

对于1。我在想处理这件事的最好方法是什么。假设我选择了< code>x个过滤器。这意味着我必须从< code > observable list 中过滤出< code>x值:

logTable.setItems(logTable.getItems().filtered(log -> !log.getSource().equals(checkBox.getText())));

共有1个答案

逑何平
2023-03-14

您可以使用JavaFX的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);

如果要再次显示所有记录,只需将谓词设置为null

 items.setPredicate(null);

使用 FilteredList,您无需重新读取日志记录,因为筛选器会立即应用于现有项目。

 类似资料:
  • 我需要一个通过observatelist填充的组合框,其中包含从DB检索的特定数据。这是我的消息来源。 模型 查看 ComboBox由NAME字段填充,listener用于获取相对ID并将其传递给查询,以便在DB上存储数据。 好的,一切似乎都正常,但我有两个问题: > 当用户需要修改此记录时,我需要从DB获取ID并在ComboBox中选择相对名称。我该怎么做? comboBank.set值; 有没

  • 本文向大家介绍system.reactive 过滤可观察值,包括了system.reactive 过滤可观察值的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我正在用一个库编程,我不知道代码,只知道方法,我不能修改它。我试着制作一个“航班”的表格视图,但我不知道如何为每个航班命名(或ID)。有人能帮我吗?谢谢此处有一些代码:

  • 如何搜索/过滤类型字符串数组的可观察性? 例如,我有以下可观察的 现在,我想根据用户在输入文本框中输入的内容来过滤这个可观察的内容。 所以我有以下代码 请注意,我正在寻找客户端解决方案。我已经有了客户端的数据 我还尝试了flatmap操作符来展平数组,但最终还是无法返回字符串数组类型的可观察值。 任何帮助都将不胜感激。提前谢谢。 应用程序。组成部分html 一个pp.component.ts

  • 问题内容: 给定汽车清单(),我可以这样做: 有没有办法我可以从一个到一个序列? 像没有参数的东西 问题答案: 您可以这样映射到: 请注意,flatMapping可能不会保留源可观察的顺序。如果订单对您很重要,请使用。

  • 我正在开发一个功能,我需要根据本地数据库数据过滤掉网络响应数据。 例如,我的网络层返回一个项目列表,我的数据库层返回一个可观察的ID列表。现在,我只想从网络层返回那些id与数据库层响应中的任何人都匹配的对象。 下面的代码从网络获取数据并将结果保存到数据库(缓存)。 我还有一个方法可以返回需要过滤的场馆列表 现在,我如何扩展前面的链,使用getDislikedVinces()observate从网络