스니펫:버추얼 테이블을 이용하여 많은 수의 아이템을 빠르게 보여주기

위클립스
이동: 둘러보기, 찾기
스니펫 분류
스니펫 (3)
스니펫/JDT (1)
스니펫/PDE (3)
스니펫/SWT (7)

아래 코드는 10,000,000 (천만) 개의 가상 TableItem을 갖는 테이블을 만든다. 실제로는 눈에 보이는 갯수만큼의 TableItem만 만들어지기 때문에 매우 빠르게 작동한다.

[편집] 실행 결과

Virtual-table-example.jpg

[편집] 소스

public class VirtualTable {
   public static void main(String[] args) {
      Display display = Display.getDefault();
      Shell shell = new Shell();
 
      shell.setLayout(new FillLayout());
 
      // 버추얼 플래그를 이용해 테이블 뷰어를 만듬
      TableViewer viewer = new TableViewer(shell, SWT.VIRTUAL | SWT.FULL_SELECTION);
 
      // 레이지 컨텐트 프로바이더
      viewer.setContentProvider(new ILazyContentProvider() {
         private TableViewer viewer;
 
         @Override
         public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            this.viewer = (TableViewer) viewer;
         }
 
         @Override
         public void dispose() {
         }
 
         @Override
         public void updateElement(int index) {
            // 입력 모델과 상관 없이 index에 해당하는 Integer 객체를 엘리먼트로 설정
            viewer.replace(new Integer(index), index);
         }
      });
 
      // 테이블 레이지 컨텐트 프로바이더는 스스로 로우의 갯수를 업데이트 하지 않으므로, 외부에서 갯수를 줌 
      viewer.setItemCount(10000000);
 
      // 기본 레이블 프로바이더는 toString() 을 레이블로 사용함.
      viewer.setLabelProvider(new LabelProvider());
 
      // 의미 없는 입력
      viewer.setInput(new Object());
 
      shell.setSize(200, 400);
      shell.open();
 
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) {
            display.sleep();
         }
      }
   }
}

[편집] 링크

개인 도구
이름공간
변수
행위
포탈
탐색
도움
도구모음