가상 트 리 와 가상 테이블 만 들 기

2939 단어 데이터 구조
나무 나 시 계 를 만 드 는 데 는 데이터 양 이 너무 많 으 면 모든 데 이 터 를 한꺼번에 불 러 오 는 데 많은 시간 이 걸 릴 때 도 있다.SWT 에 서 는 데이터 로드 를 지연 시 키 기 위해 트 리 나 표 의 구축 과 표 시 를 가속 화 하 는 가상 스타일 을 제공 합 니 다.
 
빈 나무 나 빈 시 계 를 실현 하려 면 VIRTUAL 스타일 을 사용 해 야 합 니 다.
 
가상 트 리 / 표 구축 에 필요 한 몇 가지 관건:
 
1. VIRTUAL 스타일 의 설정
 
분명히 이것 은 필수 적 인 것 이다. 예 를 들 어:
//   
Tree tree = new Tree(composite, SWT.BORDER | SWT.VIRTUAL);

//   
Table table = new Table(composite, SWT.BORDER | SWT.VIRTUAL);
 
2. 표 시 된 Ite m 수 설정
 
예 를 들 면:
table.setItemCount(COUNT);

tree.setItemCount(COUNT);
이것 도 필수 입 니 다. 아래 SetData 이벤트 에서 이 Item 수 에 따라 감청 이벤트 의 호출 횟수 를 결정 해 야 하기 때 문 입 니 다.보통 이 값 은 트 리 나 표 가 처음 표 시 될 때의 보 이 는 ite m 로 설정 합 니 다.불확실 할 때 는 표시 의 정확성 을 확보 하기 위해 적당 한 값 을 선택해 야 한다.
 
3. SetData 감청 증가
 
상기 두 단계 가 완 료 된 후에 우 리 는 SWT 의 SetData 감청 사건 을 추가 하여 마지막 임 무 를 완성 해 야 한다.예 를 들 면:
 
tree.addListener(SWT.SetData, new Listener() { 
	public void handleEvent(Event event) { 
                     ……
           }
}

table.addListener(SWT.SetData, new Listener() { 
	public void handleEvent(Event event) { 
                     ……
           }
}
이 사건 은 두 가지 상황 에서 모두 호출 됩 니 다. (1) 트 리 노드 가 펼 쳐 질 때.(2) 창 이 보일 때.
 
이 방법 은 트 리 가 표시 되 거나 하나의 노드 가 열 릴 때 하위 노드 수 를 계산 하고 각 하위 노드 의 내용 을 결정 하 는 데 사용 된다.
 
4. 노드 정 보 를 기록 합 니 다.
 
이것 은 매우 중요 하지만, 허수 / 표 자체 의 구축 에 있어 서 는 그것 의 일부분 에 속 하지 않 는 다.그래도 중요 하 다 고 생각 합 니 다.
 
분명히 나무 결점 이나 나무 결점 의 자 결점 을 정확하게 구축 하기 위해 우 리 는 결점 정 보 를 기록 하 는 곳 이 필요 하 다. 이 견 인 견 지 는 각자 의 방법 이 있 을 수 있다.예 를 들 어 보통 setData (Object data) 방법 으로 각 노드 의 정 보 를 기록 하고 아래 의 예 시 를 볼 수 있다.
 
예시
 
트 리 를 예 로 들 면 디 렉 터 리 구 조 를 표시 하 는 트 리:
//setData  
Tree tree = new Tree(shell, SWT.VIRTUAL | SWT.BORDER);
File[] roots = File.listRoots();
tree.setData(roots);

//setItemCount
tree.setItemCount(roots.length);

//    
tree.addListener(SWT.SetData, new Listener() {
	public void handleEvent(Event event) {
		//event                   
		TreeItem item = (TreeItem) event.item;
		TreeItem parentItem = item.getParentItem();
		File file = null;
		//      null,            (     )
		if (parentItem == null) {
			/* root-level item */
			File[] files = (File[]) tree.getData();
			file = files[event.index];
			item.setText(file.toString());
		} 
		/*
		*         ,              
		*              
		*   index        
		*/
		else {
			File[] files = (File[]) parentItem.getData();
			file = files[event.index];
			item.setText(file.getName());
		}
		
		//     ,         ,        
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			if (files != null) {
				item.setData(files);
				item.setItemCount(files.length);
			}
		}
	}
});
 
가상 트 리 / 표 에 대해 JFace 에 ILazy Tree ContentProvider 와 ILazy ContentProvider 가 있 습 니 다. 사용 방법 을 시험 해 볼 수 있 습 니 다.

좋은 웹페이지 즐겨찾기