0

在我的 Java 桌面应用程序中,该表中有一个 JTable(来自 swing 的表),其中包含各种人的姓名。现在我想在搜索中写一些东西(用于搜索名称的文本框),然后在输入每个字母后,对 JTable 的结果进行排序....例如,有五个以字母“a”开头的字符串,所以当我输入一个所有这五个字符串都必须显示在 JTable 中,然后有 2 个以“ab”开头的字符串,因为我在“a”之后写了“b”,那么必须显示这 2 个字符串....

..请帮助我的朋友

4

2 回答 2

0
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;
}
于 2013-10-19T21:27:58.700 回答
0

如果我正确理解了您的问题,则该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();
    }
});
于 2013-10-19T23:18:49.430 回答