如何使用jtextfield搜索jtable中的数据?

2023-12-03

我在 netbeans 中创建 jtable 并在 jtable 中填充数据库中的数据,但我无法使用 jtextfield 在 jtable 中实现搜索选项。任何人都可以指导我吗? 谢谢


为了搜索表格上的内容,您必须将原始内容存储在某个变量中。在下面的示例中,我将表格模型的初始值存储到向量中。
下面有两种实现。一种是在文本字段中键入内容后立即搜索,另一种是仅在单击按钮后进行搜索。

对于第一个,你必须使用文档监听器为你做事。

下面的函数将删除表值[如果没有找到匹配项,表将为空]并在所有单元格中搜索字符串,如果找到匹配项,则会将该行添加到表中。

public void searchTableContents(String searchString) {    
  DefaultTableModel currtableModel = (DefaultTableModel) table.getModel();
    //To empty the table before search
    currtableModel.setRowCount(0);
    //To search for contents from original table content
    for (Object rows : originalTableModel) {
        Vector rowVector = (Vector) rows;
        for (Object column : rowVector) {
            if (column.toString().contains(searchString)) {
                //content found so adding to table
                currtableModel.addRow(rowVector);
                break;
            }
        }

    }
}

这是上面的完整代码

import java.util.Vector;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;

public class TableSearch extends javax.swing.JFrame {
Vector originalTableModel;
DocumentListener documentListener;

public TableSearch() {
    initComponents();
    setLocationRelativeTo(null);
    //backup of original values to check
    originalTableModel = (Vector) ((DefaultTableModel) table.getModel()).getDataVector().clone();
    //add document listener to jtextfield to search contents as soon as something typed on it
    addDocumentListener();
}

private void addDocumentListener() {
    documentListener = new DocumentListener() {
        public void changedUpdate(DocumentEvent documentEvent) {
            search();
        }

        public void insertUpdate(DocumentEvent documentEvent) {
            search();
        }

        public void removeUpdate(DocumentEvent documentEvent) {
            search();
        }

        private void search() {
            searchTableContents(jTextField1.getText());
        }
    };
    searchOnType.setSelected(true);
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    table = new javax.swing.JTable();
    jPanel1 = new javax.swing.JPanel();
    searchOnType = new javax.swing.JCheckBox();
    jTextField1 = new javax.swing.JTextField();
    searchButton = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    table.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {"masd", "asdad", "asdasda", "ert"},
            {"gdfg", "name", "test", "dfg"},
            {"rrrh", "dfg", "sdfsf", "sdf"},
            {"ter", "retg", "wersd", "wer"}
        },
        new String [] {
            "Title 1", "Title 2", "Title 3", "Title 4"
        }
    ));
    jScrollPane1.setViewportView(table);

    getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

    searchOnType.setText("Search on Type");
    searchOnType.addItemListener(new java.awt.event.ItemListener() {
        public void itemStateChanged(java.awt.event.ItemEvent evt) {
            searchOnTypeItemStateChanged(evt);
        }
    });

    searchButton.setText("Search");
    searchButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            searchButtonActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 192, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(searchButton)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(searchOnType)
            .addContainerGap())
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(searchButton)
                .addComponent(searchOnType))
            .addContainerGap())
    );

    getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);

    pack();
}// </editor-fold>                        

private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    searchTableContents(jTextField1.getText());
}                                            

private void searchOnTypeItemStateChanged(java.awt.event.ItemEvent evt) {                                              
    if (searchOnType.isSelected()) {
        jTextField1.getDocument().addDocumentListener(documentListener);
    } else {
        jTextField1.getDocument().addDocumentListener(null);
    }
}                                             

public void searchTableContents(String searchString) {
    DefaultTableModel currtableModel = (DefaultTableModel) table.getModel();
    //To empty the table before search
    currtableModel.setRowCount(0);
    //To search for contents from original table content
    for (Object rows : originalTableModel) {
        Vector rowVector = (Vector) rows;
        for (Object column : rowVector) {
            if (column.toString().contains(searchString)) {
                //content found so adding to table
                currtableModel.addRow(rowVector);
                break;
            }
        }

    }
}

public static void main(String args[]) {
    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TableSearch().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField jTextField1;
private javax.swing.JButton searchButton;
private javax.swing.JCheckBox searchOnType;
private javax.swing.JTable table;
// End of variables declaration                   
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用jtextfield搜索jtable中的数据? 的相关文章

  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它

随机推荐

  • css 选择器:第一个子元素

    div li first child 上面的CSS选择器的目标是什么 页面上每个 div 的第一个 li or div 的所有后代 li 其中 div 是其父级的第一个子级 The first child适用于li 应该选择lis 是任何
  • 非常不寻常的 Xcode 编译行为

    自从 Xcode 6 1 和 iOS 8 1 发布以来 我的一个应用程序停止运行 仅当我使用 发布 而不是 调试 方案在设备上执行 运行 时 我才设法重现该问题 现在来说说问题 这在调试模式下工作正常 import Foundation c
  • 如何解决 ASP.NET 中全局文件中的 Ninject 依赖关系?

    我正在将 Ninject 和 Ninject Web 程序集与 Web 表单应用程序一起使用 在 global asax 文件中 我指定了如下绑定 public class Global NinjectHttpApplication pro
  • 并发修改异常

    通过下面的代码片段 我尝试处理电子表格 但需要排除临时列 我知道我这样做的粗略方式 将异常放入 ArrayList 并处理每个列表 并且在当前行列上不断增量是不正当的 但你知道只是完成它 但是我收到了标题错误 我相信这种情况永远不会发生 我
  • 如何格式化数字 0..9 以显示 2 位数字(不是日期)

    我希望始终显示 100 以下的 2 位数字 例如 03 05 15 如何在不使用条件来检查 0 是否低于 10 的情况下附加 0 我需要将结果附加到另一个字符串 所以我不能使用 printf 您可以使用 String format 02d
  • SpriteKit - SKScene 边界不等于 SKView 边界

    最近我创建了一个新的 Xcode 游戏项目 我没有碰任何东西就运行了模板 我期待一个标准你好世界 应用程序 但我注意到一件事 我得到的不是充满背景的场景 而是场景cut在顶部和底部 我怎样才能让它充满整个屏幕 看起来默认的 SpriteKi
  • Flask - 将反馈数据存储到服务器

    我使用烧瓶应用程序作为服务器 我只是返回用户交易 但是 如果交易错误 我需要允许用户向服务器提供反馈 from flask import Flask render template request import pandas as pd p
  • 使用 Angular.js 版本 1.2.18 进行嵌套过滤

    我是第一次尝试 AngularJS 我确实重复了一个基于 JSON 数据的模板 这是一个示例 scope users name first user status name employee name second user status
  • 删除 matplotlib 图上的图例

    要将图例添加到 matplotlib 图中 只需运行legend How to remove情节中的传奇 我最接近的是运行legend 为了从数据中清空图例 但这会在右上角留下一个丑陋的白色矩形 As of 绘图库v1 4 0rc4 a r
  • 有关 SOLR 文档等的问题

    网站 分类广告网站 用户可以投放广告 搜索广告等 我打算使用SOLR进行搜索 然后仅以ID nr s返回结果 然后使用这些ID nr s查询mysql 最后用这些ID s显示结果 目前我在 MySQL 中有大约 30 个表 每个类别一个 1
  • 如何在 Windows 上将 UTF-8 字符串打印到 std::cout?

    我正在用 C 编写一个跨平台应用程序 所有字符串均在内部进行 UTF 8 编码 考虑以下简化代码 include
  • Angular 2 不使用 CORS 保存我的身份验证 Cookie

    我有一个 Angular 2 应用程序 它应该向 Node Express 后端进行身份验证 向后端发送登录请求并接收 cookie 它应该在每个连续请求中发送此 cookie 但事实并非如此 我的角度应用程序中有 class 登录服务 p
  • SCCM 不会更新手动安装的软件

    客户端计算机均为 Windows 10 专业版 64 位 如果我们有MyCompanyApp msi通过SCCM安装后 我们发现使用SCCM可以成功更新它 那里一切正常 然而 如果我要跑MyCompanyApp msi通过双击 MSI 或运
  • 在 wxPython 应用程序中实现我自己的事件循环

    我正在编写一个 wxPython 应用程序 它将进行大量的数据分析和显示 到目前为止 当两个线程尝试同时更改 GUI 中的某些内容时 我编写的方式会导致出现问题 我想做的是建立自己的在主线程上运行的简单队列这样我就可以确保 UI 更新一次发
  • 如何在Python中转换指数并去掉“e+”?

    我从 Python 开始 最近遇到了一个具有大值的数据集 我的一个字段有一个值列表 如下所示 1 3212724310201994e 18 注意e 18在数字的末尾 如何将其转换为浮点数并删除指数而不影响该值 首先 数量is已经是浮点数 您
  • 为什么我的 sizeWithFont:constrainedToSize:lineBreakMode: 总是返回零?

    我正在尝试制作一个 UITableViewCell 根据它显示的字符串的长度来调整其高度 但我对这种方法很着迷 这是我所得到的 NSString text A really long string in here CGSize theSiz
  • 当前曲目的音频信息 iOS Swift

    假设正在播放一首曲目 通过任何应用程序 我想获取歌曲信息 例如名称 当您锁定手机时 它会与专辑封面一起显示在屏幕上 我如何使用 swift 获取该信息 这是获取音频信息的示例函数 import MediaPlayer var url NSU
  • GridView 编辑按钮需要单击 2 次

    当按下 gridview 中的编辑按钮时 只有点击 2 次后才会显示编辑模板 另一个问题 要编辑的字段的值最初显示在 gridview 中 但不显示在编辑模板中 ASP代码
  • 更改几天前的 Php 日期

    我正在 Joumla 上使用一个组件 该组件返回以下格式的日期 2 个月零 6 天前 但我需要像这样显示日期 xx 秒前 或 xx 分钟前 或 xx 小时前 或 xx 天前 开发人员告诉我必须修改这段代码 但我对 Php 完全陌生 今天我一
  • 如何使用jtextfield搜索jtable中的数据?

    我在 netbeans 中创建 jtable 并在 jtable 中填充数据库中的数据 但我无法使用 jtextfield 在 jtable 中实现搜索选项 任何人都可以指导我吗 谢谢 为了搜索表格上的内容 您必须将原始内容存储在某个变量中