Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
JavaFX TableView:实现数据过滤与按钮点击后的选中值获取_创想鸟

JavaFX TableView:实现数据过滤与按钮点击后的选中值获取

JavaFX TableView:实现数据过滤与按钮点击后的选中值获取

本教程详细介绍了如何在javafx应用程序中实现`tableview`的数据过滤功能。通过结合`textfield`进行实时搜索,并利用`filteredlist`动态更新表格内容。重点阐述了如何在用户点击按钮后,从已过滤的`tableview`中准确获取当前显示的数据,并进一步处理,例如传递给其他fxml视图。

在JavaFX应用开发中,TableView是展示数据集合的强大组件。当数据量较大时,为用户提供过滤功能以快速定位所需信息变得尤为重要。本教程将引导您完成构建一个带有搜索过滤功能并能在按钮点击后获取当前过滤结果的TableView。

1. JavaFX TableView与过滤功能基础设置

首先,我们需要在FXML文件中定义TableView、用于输入的TextField和触发搜索操作的Button。

1.1 FXML 布局结构

以下是一个典型的FXML布局片段,包含了这些组件:

                                                                            

1.2 控制器初始化与数据加载

在控制器中,我们需要注入FXML组件,并准备数据模型。假设我们有一个Employee类,包含id、name和salary属性。

腾讯智影-AI数字人 腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

腾讯智影-AI数字人 73 查看详情 腾讯智影-AI数字人

立即学习“Java免费学习笔记(深入)”;

package your.package.name;import javafx.collections.FXCollections;import javafx.collections.ObservableList;import javafx.collections.transformation.FilteredList;import javafx.collections.transformation.SortedList;import javafx.event.ActionEvent;import javafx.fxml.FXML;import javafx.scene.control.Button;import javafx.scene.control.TableColumn;import javafx.scene.control.TableView;import javafx.scene.control.TextField;import javafx.scene.control.cell.PropertyValueFactory;import java.util.List;import java.util.stream.Collectors;public class Controller {    @FXML    private TableView mTableView;    @FXML    private TableColumn idColumn;    @FXML    private TableColumn nameColumn;    @FXML    private TableColumn salColumn;    @FXML    private TextField mTextField;    @FXML    private Button searchBtn; // 注入Search按钮,虽然本例中直接使用onAction    // 存储所有原始数据的列表    private ObservableList mList = FXCollections.observableArrayList();    /**     * Employee 数据模型示例     */    public static class Employee {        private final int id;        private final String name;        private final String salary; // 假设salary为String类型        public Employee(int id, String name, String salary) {            this.id = id;            this.name = name;            this.salary = salary;        }        // Getter 方法 (PropertyValueFactory 需要这些方法)        public int getId() { return id; }        public String getName() { return name; }        public String getSalary() { return salary; }        @Override        public String toString() {            return "Employee{" +                   "id=" + id +                   ", name='" + name + ''' +                   ", salary='" + salary + ''' +                   '}';        }    }    /**     * 在控制器初始化时调用,用于设置TableView和过滤逻辑。     */    @FXML    public void initialize() {        // 1. 设置列的CellValueFactory,将Employee对象的属性映射到TableView的列        idColumn.setCellValueFactory(new PropertyValueFactory("id"));        nameColumn.setCellValueFactory(new PropertyValueFactory("name"));        salColumn.setCellValueFactory(new PropertyValueFactory("salary"));        // 2. 加载原始数据        loadRecords();        // 3. 初始化FilteredList,用于实现过滤功能        // 初始时显示所有数据 (b -> true)        FilteredList filteredList = new FilteredList(mList, b -> true);        // 4. 监听mTextField的文本变化,实时更新过滤条件        mTextField.textProperty().addListener((observable, oldValue, newValue) -> {            filteredList.setPredicate(employee -> {                // 如果搜索框为空或空白,则显示所有数据                if (newValue == null || newValue.isBlank()) {                    return true;                }                String searchKeyword = newValue.toLowerCase();                // 示例过滤逻辑:根据员工ID进行匹配                // 您可以扩展此逻辑以匹配姓名、薪资或其他字段                if (String.valueOf(employee.getId()).toLowerCase().contains(searchKeyword)) {                    return true;                }                // 更多过滤条件示例:                // if (employee.getName().toLowerCase().contains(searchKeyword)) { return true; }                // if (employee.getSalary().toLowerCase().contains(searchKeyword)) { return true; }                return false; // 不匹配任何条件            });        });        // 5. 使用SortedList包装FilteredList,以支持TableView的排序功能        SortedList sortedList = new SortedList(filteredList);        // 将SortedList的比较器属性绑定到TableView的比较器属性,以便TableView的排序功能生效        sortedList.comparatorProperty().bind(mTableView.comparatorProperty());        // 6. 将最终的SortedList(包含过滤和排序逻辑)设置给TableView        mTableView.setItems(sortedList);    }    /**     * 模拟从数据库或其他源加载数据。     */    private void loadRecords() {        // 示例数据        mList.addAll(                new Employee(101, "Alice Smith", "50000"),                new Employee(102, "Bob Johnson", "60000"),                new Employee(103, "Charlie Brown", "55000"),                new Employee(201, "David Lee", "70000"),                new Employee(202, "Eve Davis", "62000"),                new Employee(301, "Frank White", "48000")        );    }}

2. 按钮点击时获取过滤后的数据

当用户点击“Search”按钮时,我们通常需要获取当前TableView中显示的数据(即经过过滤后的结果),以便进行进一步的操作,例如加载另一个FXML视图并传递这些数据。

TableView的getItems()方法返回的是当前显示在表格中的ObservableList。当TableView绑定到一个SortedList(它又包装了FilteredList)时,getItems()将返回经过过滤和排序后的数据。

// 承接上面的Controller类// ...    /**     * 处理Search按钮点击事件。     * 在此方法中获取当前TableView中显示的(已过滤)数据。     */    @FXML    public void handleSearch(ActionEvent event) {        // 获取当前TableView中显示的所有项,这些项已经经过TextField的过滤逻辑处理        ObservableList currentDisplayedItems = mTableView.getItems();        if (!currentDisplayedItems.isEmpty()) {            System.out.println("--- 搜索按钮点击,获取当前过滤结果 ---");            // 示例:遍历并打印所有过滤结果            currentDisplayedItems.forEach(employee -> System.out.println("匹配员工: " + employee));            // 示例:获取第一个匹配项。这在预期只有一个结果时非常有用。            Employee firstMatchedEmployee = currentDisplayedItems.get(0);            System.out.println("第一个匹配的员工: " + firstMatchedEmployee.getName() + " (ID: " + firstMatchedEmployee.getId() + ")");            // 进一步处理逻辑:            // 1. 如果预期只有一个结果,并且需要将其传递给另一个FXML视图:            //    FXMLLoader loader = new FXMLLoader(getClass().getResource("AnotherView.fxml"));            //    Parent root = loader.load();            //    AnotherController anotherController = loader.getController();            //    anotherController.initData(firstMatchedEmployee); // 假设AnotherController有一个initData方法            //    Stage stage = new Stage();            //    stage.setScene(new Scene(root));            //    stage.show();            //    ((Node)(event.getSource())).getScene().getWindow().hide(); // 关闭当前窗口            // 2. 如果搜索结果可能包含多个项,并且需要用户从中选择一个,或者需要对所有结果进行批量处理:            if (currentDisplayedItems.size() > 1) {                System.out.println("提示:搜索结果包含多个匹配项。您可以选择进一步处理所有项或提示用户选择。");                // 例如,可以将这些结果显示在一个新的对话框中供用户选择            }        } else {            System.out.println("没有找到匹配的员工。");            // 可以向用户显示一个警告或提示信息        }    }}

3. 注意事项与最佳实践

数据模型与PropertyValueFactory的一致性:确保Employee类中的属性名(例如id、name、salary)与PropertyValueFactory中使用的字符串参数完全匹配,并且Employee类提供了对应的公共getter方法(例如getId()、getName()、getSalary())。空列表处理:在尝试从currentDisplayedItems中获取元素之前,务必检查列表是否为空(!currentDisplayedItems.isEmpty()),以避免IndexOutOfBoundsException。多结果处理:如果您的搜索逻辑可能返回多个结果,需要根据业务需求决定如何处理。是只取第一个,还是提供一个机制让用户从多个结果中选择,或者对所有结果进行某种汇总处理?性能优化:对于非常大的数据集和复杂的过滤逻辑,考虑优化setPredicate中的逻辑,避免在每次输入时

以上就是JavaFX TableView:实现数据过滤与按钮点击后的选中值获取的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/574797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
一加Ace3省电模式白名单设置
上一篇 2025年11月10日 07:53:16
快手国际版Kwai官网入口 面向海外用户的精彩内容
下一篇 2025年11月10日 07:53:17

相关推荐

  • 蝴蝶号无人直播完整流程详解:搭建+开播+引流

    蝴蝶号无人直播完整流程详解:搭建+开播+引流蝴蝶号无人直播完整流程详解:搭建+开播+引流蝴蝶号无人直播完整流程详解:搭建+开播+引流蝴蝶号无人直播完整流程详解:搭建+开播+引流

    蝴蝶号无人直播的完整流程包括前期准备、直播搭建、开播设置、引流推广、监控与维护五个步骤。前期准备需完成账号注册认证、硬件设备配置、软件安装及素材准备;直播搭建涉及场景设置、素材导入、循环播放设定及自动化脚本配置;开播设置包括直播间信息填写、推流配置与测试直播;引流推广可通过平台内工具、社交媒体、内容…

    2026年9月22日 用户投稿
    100
  • 如何在VEED.io中制作AI视频?在线工具快速剪辑AI内容的步骤

    如何在VEED.io中制作AI视频?在线工具快速剪辑AI内容的步骤如何在VEED.io中制作AI视频?在线工具快速剪辑AI内容的步骤如何在VEED.io中制作AI视频?在线工具快速剪辑AI内容的步骤如何在VEED.io中制作AI视频?在线工具快速剪辑AI内容的步骤

    VEED.io通过“文本转视频”和“AI形象”功能,让视频制作变得简单高效。用户只需输入文本,即可生成带AI配音、字幕和匹配素材的视频,或选择AI虚拟人物进行口型同步播报。平台还提供AI语音合成、自动字幕、多语言支持及丰富编辑功能,便于后期精修。优化效果需从高质量文本入手,合理选择声音与形象,并通过…

    2026年9月22日 用户投稿
    000
  • Java中递归处理列表:条件性移除最大值策略与实现

    本教程深入探讨了如何在Java中使用递归方法,根据特定条件(如列表是否已排序、最大值是否位于列表的首尾)来移除列表中的最大值。文章将详细阐述如何设计一个高效的递归算法,包括排序检查、最大值定位以及条件性移除的实现细节,并提供完整的代码示例和注意事项,帮助读者掌握递归在复杂列表操作中的应用。 引言:递…

    2026年9月22日
    000
  • 玩转 Spring Boot 集成篇(定时任务框架Quartz)

    玩转 Spring Boot 集成篇(定时任务框架Quartz)玩转 Spring Boot 集成篇(定时任务框架Quartz)玩转 Spring Boot 集成篇(定时任务框架Quartz)玩转 Spring Boot 集成篇(定时任务框架Quartz)

    在日常项目研发中,定时任务可谓是必不可少的一环,关于 spring boot 如何实现静态定时任务、动态定时任务以及如何开启多线程跑任务,均已在上篇分享过,不再赘述。 虽然 Spring Boot 内置注解方式实现的定时任务,在一定程度上也能解决一定的业务场景问题,但是若做更复杂的动作,例如启停任务…

    2026年9月22日 用户投稿
    100
  • Cortana如何连接邮箱_Cortana邮箱同步配置方法

    首先需将邮箱账户与Cortana连接,可通过Windows设置添加账户或在Cortana应用内手动配置,支持Outlook.com、Gmail及Exchange等类型;完成账户添加后,须在隐私权限中启用邮件读取和同步权限,确保Cortana可访问邮件、日历及联系人数据,从而实现智能提醒与信息同步功能…

    2026年9月22日
    000
  • 如何用Sublime导出MySQL数据表结构_生成Markdown或HTML格式文档

    要使用 sublime text 导出 mysql 数据表结构并生成 markdown 或 html 文档,需通过以下步骤操作:1. 使用 show create table 命令或 mysqldump 工具获取建表语句;2. 在 sublime 中整理字段信息,按字段名、类型、是否为空、键、默认值…

    2026年9月22日
    000
  • 三角洲行动S6九格保险任务速通指南

    三角洲行动S6九格保险任务速通指南三角洲行动S6九格保险任务速通指南三角洲行动S6九格保险任务速通指南三角洲行动S6九格保险任务速通指南

    在《三角洲行动》s6赛季中,九格保险任务成了不少玩家头疼的难题,耗时久、节奏慢,稍不注意就被卡住。其实只要掌握策略,合理安排任务顺序,高效推进并非难事!接下来这份分阶段速通攻略,将帮你理清思路,快速通关九格保险任务! 三角洲行动S6赛季九格保险任务高效速通指南 第一阶段:聚焦主线与关键前置 优先完成…

    2026年9月22日 用户投稿
    100
  • 解决PHP应用中本地文件更新后网页视图不刷新的缓存问题

    本文探讨了PHP应用中,本地JSON或图片文件更新后,网页视图无法实时刷新的常见问题。核心原因在于浏览器缓存机制。文章将提供多种解决方案,包括强制刷新、隐身模式诊断、以及通过URL参数、服务器配置(.htaccess)和文件版本控制来有效管理缓存,确保用户始终获取最新数据。 理解问题:本地文件更新与…

    2026年9月22日
    200
  • VSCode如何安装和使用插件 VSCode插件管理的高效方法

    安装插件需通过vscode扩展视图搜索并点击安装,部分插件需重启或配置后生效;2. 使用插件时可通过命令面板、上下文菜单、状态栏或自动语言特性调用功能,并在设置中自定义行为;3. 高效管理应定期审视插件使用频率,禁用或卸载不常用者,关注性能影响,利用“开发者: 显示正在运行的扩展”识别资源占用高的插…

    2026年9月22日
    200
  • Java Stream API:从嵌套集合中提取唯一值的高效实践

    本文深入探讨如何利用Java Stream API,从包含嵌套集合的对象列表中高效地提取唯一的字符串值。我们将重点介绍flatMap()和mapMulti()这两种强大的流操作,演示它们如何替代传统的嵌套循环,从而实现代码的简洁性、可读性以及潜在的性能优化。 在java应用开发中,我们经常会遇到处理…

    2026年9月22日
    100
  • safari浏览器如何将网页保存为PDF_safari浏览器网页保存为PDF方法

    Safari浏览器支持将网页保存为PDF,可通过三种方式实现:1. 使用打印功能,点击“文件”→“打印”,选择“另存为PDF”并设置参数后保存;2. 点击共享按钮,选择“创建PDF”,生成后存储到指定位置;3. 利用快捷指令应用创建自动化流程,获取当前网页并转换为PDF自动归档。 如果您在浏览网页时…

    2026年9月22日
    100
  • CapCut的AI混合工具如何使用?快速制作高质量短视频的教程

    CapCut的AI混合工具通过智能算法将多段素材自然融合,支持画中画、双重曝光、背景替换等效果,提升视频创意与质感;使用时需导入素材并分层,选择“混合模式”如滤色、叠加等,结合不透明度、位置调整实现融合;可打造情绪隐喻、时间流逝等叙事效果,增强艺术表达;避免过度使用、素材冲突等问题,善用蒙版、色彩调…

    2026年9月22日
    500
  • windows10如何开启剪贴板历史记录功能_windows10剪贴板历史记录设置方法

    首先启用剪贴板历史功能,通过Win+I进入系统设置,选择“系统”-“剪贴板”,开启“剪贴板历史记录”;或直接按Win+V,根据提示点击“开启”激活功能;若因组策略被禁用,可使用gpedit.msc或注册表修改EnableCdp值为1以启用。 如果您在使用Windows 10时发现复制的新内容会覆盖之…

    2026年9月22日
    100
  • 使用Java Selenium验证表格数据排序:金额列的升序与降序检查

    本教程详细介绍了如何利用Java Selenium WebDriver验证网页表格中金额列的排序功能。文章涵盖了从环境配置、登录应用到数据提取、清洗、数值转换,再到实现表格数据(特别是金额数据)的升序或降序验证的完整流程。通过示例代码,演示了如何获取页面元素、处理文本数据,并使用JUnit进行断言,…

    2026年9月22日
    100
  • 抖音播放量是什么意思?抖音播放量如何变现呢

    短视频平台已成为当下最受欢迎的传播媒介之一。作为国内领先的短视频平台,抖音凭借其强大的算法推荐机制和丰富的内容生态,吸引了大量用户。而抖音播放量,作为衡量短视频传播效果的重要指标,也逐渐成为创作者和品牌方关注的重点。本文将深入解析抖音播放量的含义,探讨其背后的逻辑及影响因素,为短视频内容生产者提供有…

    2026年9月22日
    000
  • RayLink如何设置快捷键操作_RayLink远程控制效率的提升方法

    首先启用RayLink快捷键穿透模式,进入会话设置并勾选“启用快捷键穿透模式”;接着自定义快捷键映射,在“快捷键管理”中新建规则,将本地组合键如Ctrl+Shift+S映射为远程端Win+Shift+S;然后使用预设快捷键如Ctrl+Alt+R重启远程电脑、Ctrl+Alt+M释放鼠标、Ctrl+A…

    2026年9月22日
    400
  • Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)

    could not find doxygen (missing: doxygen_executable)  使用cmake .. 有时候会遇到如下问题: 代码语言:javascript代码运行次数:0运行复制 $ cmake ..– The CXX compiler identification …

    2026年9月22日
    100
  • 解决Spring Boot Actuator升级后Tomcat指标缺失问题

    本文旨在解决Spring Boot Actuator升级至2.7.0及更高版本后,部分Tomcat指标(如tomcat.cache.access、tomcat.global.error)在MetricsEndpoint中缺失的问题。通过在application.properties中配置server…

    2026年9月22日
    600
  • Laravel 8 登录后重定向到仪表盘:完整教程

    本教程详细阐述了在 Laravel 8 中实现用户登录后重定向到仪表盘的多种方法。我们将探讨 Laravel 默认的重定向机制、如何正确配置仪表盘路由及其中间件,并提供通过自定义 LoginController 实现精确重定向的示例代码。通过本文,您将全面掌握 Laravel 认证后的重定向流程,并…

    2026年9月22日
    500
  • Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」

    Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」

    大家好,很高兴再次与大家见面,我是你们的朋友全栈君。 说明:这篇博客是博主亲自编写的,内容独特,辛苦付出,请大家尊重原创,感谢支持! 一.前言VMware Ubuntu安装的详细指南:https://www.php.cn/link/35e7132c1742eaa9dacfedd5607b5f94。 …

    2026年9月22日 用户投稿
    900

发表回复

登录后才能评论
关注微信