当前位置: 首页 > 面试题库 >

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

夹谷阳夏
2023-03-14
问题内容

我在netbeans中创建了jtable,并在jtable中填充了数据库中的数据,但是我无法使用jtextfield在jtable中实现搜索选项。谁能指导我。谢谢


问题答案:

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

对于第一个,您必须使用documentListener为您做事。

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

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                   
}


 类似资料:
  • 我有一个双数组,其中我需要使用jtextfield输入搜索第一行,以获得索引(I的位置),然后使用该索引号来标识第二行的位置,并使用第二个数组行中的变量。我用它来得到数组第二行的毛利率乘数,它基于第一行数组中的百分比利润的位置。 感谢您的帮助。我已经搜索了其他数组链接,但它们处理的是位置而不是位置的内容。 public void getMarginArray(){

  • 问题内容: 如何使用preg_match在数组中搜索? 例: 问题答案: 在这篇文章中,我将为您提供三种不同的方法来满足您的要求。 我实际上建议使用最后一个代码段,因为它最容易理解并且代码简洁。 如何查看数组中与我的正则表达式匹配的元素? 有专门用于此目的的功能。它将一个正则表达式作为第一个参数,并将一个数组作为第二个参数。 请参见以下示例: 输出 但是我只想获取指定组的值。怎么样? 与能解决清洁

  • 我有一个jTable,它由使用bean绑定的数据库中的数据填充。我想为表实现一个搜索函数。我遇到了以下教程,它使用bean绑定实现了这一点: https://weblogs.java.net/blog/pkeegan/archive/2008/06/using_beans_bin.html 我无法使它工作。当我运行我创建的示例应用程序时,我看到搜索文本字段上出现了一个意外的值,如“javax.sw

  • 我是新来的颤振,我正在遵循一个教程,显示如何搜索数据。我不能用我自己的例子来重现。我想知道如何从这个json数据中搜索ListView中的数据。 使用此代码显示

  • 问题内容: 我正在使用带有固定数据库内容的sqlite3数据库的Django应用程序。固定是指数据库的内容不会随时间变化。该模型是这样的: 该表中大约有6500条记录。给定一个可能缺少某些单词或某些单词拼写错误的文本,我需要确定其和。例如,如果db中有一个文本为 “ This is an example verse” 的字段, 则 给定的文本(例如 “ This a egsample verse”

  • 问题内容: 我有一个下面的JSON字符串,我想在JSON字符串中查找/搜索条件。 1)。查找存在的键数。2)。获取给定键的值(如果有数组) 我正在寻找类似Groovy GPath语法的解决方案 store.book-此数组的大小。 store.book [*]。category-如何对数组中存在的键进行计时。 store.bicycle-如果发现它必须返回真实值 问题答案: 您还可以使用REST