您要
documentListener与行过滤器一起使用。您可以看到如何编写documentListener。
基本上,侦听器侦听文本字段的基础文档中的更改。从您在中重写的方法中
documentListener,您可以像当前所做的那样获取文本,并像您当前所做的那样设置regex
ex过滤器
这是一个简单的示例(忽略applet。我只是从这篇文章中获得了样板代码,并添加了文档侦听器)。注意:同一篇文章提供了答案,如果您正在寻找该功能,则可以使用不区分大小写的方式进行过滤
import javax.swing.JApplet;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.RowFilter;import javax.swing.event.documentEvent;import javax.swing.event.documentListener;import javax.swing.table.TableModel;import javax.swing.table.TableRowSorter;public class TestTableSorterFilter extends JApplet { private String[] columnNames = {"Country", "Capital", "Population in Millions", "Democracy"}; private Object[][] data = { {"USA", "Washington DC", 280, true}, {"Canada", "Ottawa", 32, true}, {"United Kingdom", "London", 60, true}, {"Germany", "Berlin", 83, true}, {"France", "Paris", 60, true}, {"Norway", "Oslo", 4.5, true}, {"India", "New Delhi", 1046, true} }; private JTable jTable = new JTable(data, columnNames); private TableRowSorter<TableModel> rowSorter = new TableRowSorter<>(jTable.getModel()); private JTextField jtfFilter = new JTextField(); private JButton jbtFilter = new JButton("Filter"); public TestTableSorterFilter() { jTable.setRowSorter(rowSorter); JPanel panel = new JPanel(new BorderLayout()); panel.add(new JLabel("Specify a word to match:"), BorderLayout.WEST); panel.add(jtfFilter, BorderLayout.CENTER); add(panel, BorderLayout.SOUTH); add(new JScrollPane(jTable), BorderLayout.CENTER); jtfFilter.getdocument().adddocumentListener(new documentListener(){ @Override public void changedUpdate(documentEvent arg0) {} @Override public void insertUpdate(documentEvent arg0) { String text = jtfFilter.getText(); if (text.trim().length() == 0) { rowSorter.setRowFilter(null); } else { rowSorter.setRowFilter(RowFilter.regexFilter(text)); } } @Override public void removeUpdate(documentEvent arg0) { String text = jtfFilter.getText(); if (text.trim().length() == 0) { rowSorter.setRowFilter(null); } else { rowSorter.setRowFilter(RowFilter.regexFilter(text)); } } }); }}


