![](/img/trans.png)
[英]How can I perform case-insensitive pattern search and case-preserving replacement?
[英]How can I perform a case-insensitive filter on a 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));
添加標准正則表達式不區分大小寫標志:
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()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.