在我的 Java 桌面应用程序中,该表中有一个 JTable(来自 swing 的表),其中包含各种人的姓名。现在我想在搜索中写一些东西(用于搜索名称的文本框),然后在输入每个字母后,对 JTable 的结果进行排序....例如,有五个以字母“a”开头的字符串,所以当我输入一个所有这五个字符串都必须显示在 JTable 中,然后有 2 个以“ab”开头的字符串,因为我在“a”之后写了“b”,那么必须显示这 2 个字符串....
..请帮助我的朋友
public String[] sortedResults(String terms, String[] possibleResults){
ArrayList<String> sortedResults = new ArrayList<String, String>();
for(String currentTerm : possibleResults){
if(currentTerm.startsWith(terms)){
sortedResults.add(currentTerm);
}
}
return sortedResults;
}
如果我正确理解了您的问题,则该RowFilter
课程应该完全按照您的需要进行。请注意,这仅在您第一次调用setAutoCreateRowSorter(true)
JTable 时才有效:
private void updateFilter() {
final String prefix = textField.getText().toLowerCase();
((TableRowSorter<?>) table.getRowSorter()).setRowFilter(
new RowFilter<Object, Integer>() {
public boolean include(Entry<?, ? extends Integer> entry) {
String name = entry.getStringValue(COLUMN_LASTNAME);
return name.toLowerCase().startsWith(prefix);
}
});
}
您需要从 DocumentListener 调用该方法:
searchTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent event) {
updateFilter();
}
public void insertUpdate(DocumentEvent event) {
updateFilter();
}
public void removeUpdate(DocumentEvent event) {
updateFilter();
}
});