如何在 Java 中实现 JTable 的搜索功能?


JTable 是 JComponent 的一个子类,用于显示复杂的数据结构。JTable 组件可以遵循模型-视图-控制器(MVC)设计模式,以行和列形式显示数据。JTable 可以生成 TableModelListener、TableColumnModelListener、ListSelectionListener、CellEditorListener、RowSorterListener 接口。我们可以通过在 JTextField 中输入一个字符串来实现 JTable 的搜索功能,它可以搜索 JTable 中可用的字符串。如果字符串匹配,它只能在 JTable 中显示相应的值。我们可以使用 JTextField 的 DocumentListener 接口来实现它。

示例

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class JTableSearchTest extends JFrame {
   private JTextField jtf;
   private JLabel searchLbl;
   private TableModel model;
   private JTable table;
   private TableRowSorter sorter;
   private JScrollPane jsp;
   public JTableSearchTest() {
      setTitle("JTableSearch Test");
      jtf = new JTextField(15);
      searchLbl = new JLabel("Search");
      String[] columnNames = {"Name", "Technology"};
      Object[][] rowData = {{"Raja", "Java"},{"Vineet", "Java Script"},{"Archana", "Python"},{"Krishna", "Scala"},{"Adithya", "AWS"},{"Jai", ".Net"}};
      model = new DefaultTableModel(rowData, columnNames);
      sorter = new TableRowSorter<>(model);
      table = new JTable(model);
      table.setRowSorter(sorter);
      setLayout(new FlowLayout(FlowLayout.CENTER));
      jsp = new JScrollPane(table);
      add(searchLbl);
      add(jtf);
      add(jsp);
      jtf.getDocument().addDocumentListener(new DocumentListener() {
         @Override
         public void insertUpdate(DocumentEvent e) {
            search(jtf.getText());
         }
         @Override
         public void removeUpdate(DocumentEvent e) {
            search(jtf.getText());
         }
         @Override
         public void changedUpdate(DocumentEvent e) {
            search(jtf.getText());
         }
         public void search(String str) {
            if (str.length() == 0) {
               sorter.setRowFilter(null);
            } else {
               sorter.setRowFilter(RowFilter.regexFilter(str));
            }
         }
      });
      setSize(475, 300);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setResizable(false);
      setVisible(true);
   }
   public static void main(String[] args) {
      new JTableSearchTest();
   }
}

输出


更新于: 2020 年 2 月 10 日

3K+ 次浏览

开启您的职业生涯

完成课程即可获得认证

开始
广告