Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用jtextfield搜索jtable中的数据?_Java_Search_Netbeans_Jtable - Fatal编程技术网

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

Java 如何使用jtextfield搜索jtable中的数据?,java,search,netbeans,jtable,Java,Search,Netbeans,Jtable,我在netbeans中创建了jtable,并在jtable中从数据库填充数据,但我无法使用jtextfield在jtable中实现搜索选项。谁能给我指路吗。 谢谢为了搜索表中的内容,您必须将原始内容存储在某个变量中。在下面的示例中,我将表模型的初始值存储到一个向量中。 下面有两种实现。一种是在文本字段中键入内容后立即搜索,另一种是仅在单击按钮后搜索 对于第一个,你必须使用a来为你做事 下面的函数将删除表值[如果未找到匹配项,则表将为空]并在所有单元格中搜索字符串,如果找到匹配项,则将该行添加到表

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

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

对于第一个,你必须使用a来为你做事

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

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                   
}
import java.util.Vector;
导入javax.swing.event.DocumentEvent;
导入javax.swing.event.DocumentListener;
导入javax.swing.table.DefaultTableModel;
公共类表搜索扩展了javax.swing.JFrame{
向量原问题模型;
文档监听器文档监听器;
公共表搜索(){
初始化组件();
setLocationRelativeTo(空);
//备份要检查的原始值
originalTableModel=(Vector)((DefaultTableModel)table.getModel()).getDataVector().clone();
//将文档侦听器添加到jtextfield,以便在键入内容后立即搜索内容
addDocumentListener();
}
私有void addDocumentListener(){
documentListener=新的documentListener(){
public void changedUpdate(DocumentEvent DocumentEvent){
搜索();
}
公共作废插入更新(DocumentEvent DocumentEvent){
搜索();
}
公共作废移除更新(DocumentEvent DocumentEvent){
搜索();
}
私有无效搜索(){
searchTableContents(jTextField1.getText());
}
};
searchOnType.setSelected(true);
}
@抑制警告(“未选中”)
//                           
私有组件(){
jScrollPane1=newjavax.swing.JScrollPane();
table=newjavax.swing.JTable();
jPanel1=newjavax.swing.JPanel();
searchOnType=newjavax.swing.JCheckBox();
jTextField1=newjavax.swing.JTextField();
searchButton=newjavax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
table.setModel(新的javax.swing.table.DefaultTableModel(
新对象[][]{
{“masd”、“asdad”、“asdasda”、“ert”},
{“gdfg”、“name”、“test”、“dfg”},
{“rrrh”、“dfg”、“sdfsf”、“sdf”},
{“ter”、“retg”、“wersd”、“wer”}
},
新字符串[]{
“标题1”、“标题2”、“标题3”、“标题4”
}
));
jScrollPane1.setViewportView(表);
getContentPane().add(jScrollPane1,java.awt.BorderLayout.CENTER);
searchOnType.setText(“在类型上搜索”);
searchOnType.addItemListener(新java.awt.event.ItemListener(){
public void itemStateChanged(java.awt.event.ItemEvent evt){
searchOnTypeItemStateChanged(evt);
}
});
searchButton.setText(“搜索”);
searchButton.addActionListener(新java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
执行搜索按钮操作(evt);
}
});
javax.swing.GroupLayout jPanel1Layout=新的javax.swing.GroupLayout(jPanel1);
setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpanellayout.createSequentialGroup()
.addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED\u SIZE,192,javax.swing.GroupLayout.PREFERRED\u SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(搜索按钮)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(searchOnType)
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpanellayout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.PREFERRED\u SIZE)
.addComponent(搜索按钮)
.addComponent(searchOnType))
.addContainerGap())
);
getContentPane().add(jPanel1,java.awt.BorderLayout.NORTH);
包装();
}//                         
private void searchButtonActionPerformed(java.awt.event.ActionEvent evt){
searchTableContents(jTextField1.getText());
}                                            
private void searchOnTypeItemStateChanged(java.awt.event.ItemEvent evt){
如果(searchOnType.isSelected()){
jTextField1.getDocument().addDocumentListener(documentListener);
}否则{
jTextField1.getDocument().addDocumentListener(空);
}
}                                             
public void searchTableContents(字符串searchString){
DefaultTableModel CurrtTableModel=(DefaultTableModel)table.getModel();
//在搜索之前清空表的步骤
currtableModel.setRowCount(0);
//从原始表内容中搜索内容的步骤
用于(对象行:originalTableModel){
向量行向量=(向量)行;
用于(对象列:行向量){
if(column.toString()包含(searchString)){
//发现内容正在添加到表中
currtableModel.addRow(rowVector);
打破
}
}
}
}
公众的