2013-10-19 2 views
0

내 Java 데스크톱 응용 프로그램에는 JTable (스윙 테이블)이 여러 테이블에 있습니다. 이제 내가 검색 (텍스트 검색 상자에 이름을 검색하기 위해)을 쓰고 싶은 경우 각 문자를 입력 한 후 JTable의 결과가 정렬됩니다. 예를 들어 알파벳 5 개가 "a"로 시작하여 입력 할 때 그 5 개의 문자열은 모두 JTable에 표시되어야합니다. 그런 다음 "a"다음에 "b"를 쓰면 "ab"로 시작하는 두 개의 문자열이 표시됩니다 ...각 알파벳을 입력 한 후 JTable IN JTable INSTRUCTIONList를 업데이트합니다.

.. 도와주세요 out friends

+1

당신이 코드를 보여줄 수 있습니까? – Trein

+0

내가 틀렸다면 정정 해주세요.하지만 테이블 정렬을 원하지 않는 것처럼 들립니다. 오히려 테이블을 필터링해야합니다. – VGR

답변

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; 
} 
+0

코드가 누락되어 죄송합니다. 입력 할 때 우연히 두 번 입력했습니다. 전체 코드가 포함되도록 답을 편집했습니다. – john01dav

+0

수천 개의 문자열이 일치하는 시나리오에서는 매우 느린 구현입니다. – Izmaki

+0

아마도 결과를 압축하는 것과 같은 길이의 배열을 추가하는 것이 효과가 있을까요? 또한 그의 질문에 그는 수천 개의 현이 있다고 말하지 않습니다. – john01dav

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

올바른 생각이지만 더 좋은 대답은 [Sorting and Filtering] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting)의 스윙 튜토리얼을 참조하면됩니다. 예. 이 자습서는 앞으로 미래의 스윙 문제에 대한 참고 자료로 사용될 수있을뿐만 아니라 – camickr