在输入每个字母表后更新arrayList以及JTable IN JAVA桌面应用程序

时间:2013-10-19 21:23:29

标签: java swing jtable

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

..请帮帮我朋友

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

如果我正确理解您的问题,RowFilter课程应该完全符合您的要求。请注意,这只有在您首次在JTable上调用setAutoCreateRowSorter(true)时才有效:

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