如何在JTable上执行不区分大小写的filter?

我正在制作一个带有文本字段的表格,您可以在其中输入单词来过滤表格。 它有效,但我想要做的是能够用输入的单词过滤它,但忽略单词的情况。 有没有办法在不创建自定义RowFilter情况下完成此操作?

您可以运行此SCCEE以查看我正在谈论的内容。 我想能够输入usa ,它将过滤USA

 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 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.table.TableModel; import javax.swing.table.TableRowSorter; public class TestTableSortFilter 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 rowSorter = new TableRowSorter(jTable.getModel()); private JTextField jtfFilter = new JTextField(); private JButton jbtFilter = new JButton("Filter"); public TestTableSortFilter() { 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.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { String text = jtfFilter.getText(); if (text.trim().length() == 0) { rowSorter.setRowFilter(null); } else { rowSorter.setRowFilter(RowFilter.regexFilter(text)); } } }); } } 

有没有什么我可以传递给regexFilter(text) ,这会给我想要的结果?

 rowSorter.setRowFilter(RowFilter.regexFilter(text)); 

添加标准的正则表达式不区分大小写标志 :

 rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text)); 

我用你的SSCCE测试了这个(感谢你提供的)并且它有效。

 rowSorter.setStringConverter(new TableStringConverter() { @Override public String toString(TableModel model, int row, int column) { return model.getValueAt(row, column).toString().toLowerCase(); } }); rowSorter.setRowFilter(RowFilter.regexFilter(jtfFilter.getText().toLowerCase()));