2013-05-15 2 views
0

MVC 패턴을 사용하여 구현 된 Swing 프로젝트에서 JTable을 처리하기 위해 GlazedList를 사용하고 있습니다. 내 컨트롤러에 테이블에 필터링 기능을 통합하기 위해 다음 코드가 있습니다.GlazedList - 1 열을 기준으로 테이블 필터링

final JTextField txtFilter = view.getTxtSearch(); 
    FilterList<E> textFilteredSource = new FilterList<E>(model.getDataTableSource(), new TextComponentMatcherEditor<E>(txtFilter, new TextFilterator<E>() { 
     public void getFilterStrings(List baseList, E element) { 
      Person p = (Person) element; 
      baseList.add(p.getFirstName()); 
      baseList.add(p.getLastName()); 
      baseList.add(p.getBirthDay()); 
      baseList.add(p.getAge()); 
      baseList.add(p.getOccupation()); 
     } 
    })); 

model.setDataTableSource(textFilteredSource); 

위의 코드를 사용하면 전체 테이블에있는 모든 데이터를 기준으로 필터링 할 수 있습니다. 내가 원했던 것은 하나의 컬럼만을 기반으로 테이블을 필터링하는 기능입니다. 아무도 이것을 성취 할 방법을 알고 있습니까?

답변

0

그래, 같은 문제가 발생할 사람을 위해, 나는 실험을 통해 직접 해결했고, baseList은 실제로 FilterList이 필터링 작업을 수행 할 문자열 목록임을 알게되었습니다. 필자의 요구 사항을 충족하기 위해 필자는 필터링해야하는 열 값을 baseList 매개 변수에 추가했습니다.

다음 코드는보기에서 오는 선택한 콤보 상자 인덱스를 기반으로 테이블을 필터링합니다.

public void getFilterStrings(List baseList, E element) { 
     JComboBox cbo = view.getCboSearch(); 
     int selIndex = cbo.getSelectedIndex(); 
     Person p = (Person) element; 

     if(selIndex == 0) 
      baseList.add(p.getFirstName()); 
     else if(selIndex == 1) 
      baseList.add(p.getLastName()); 
     else if(selIndex == 2) 
      baseList.add(p.getBirthDay()); 
     else if(selIndex == 3) 
      baseList.add(p.getAge()); 
     else if(selIndex == 4) 
      baseList.add(p.getOccupation()); 
    } 
관련 문제