Как я могу выполнить фильтр без учета регистра на JTable?

Я создаю таблицу с текстовым полем под ней, где вы можете ввести слово для фильтрации таблицы. Он работает, но то, что я хочу сделать, это возможность фильтровать его с введенным словом, но игнорируя случай слова. Есть ли способ сделать это без создания пользовательского 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<TableModel> 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));

Ответ 2

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()));