TreeViewer
refresh()
메서드를 호출하여 모델의 전체 트리를 새로 고치거나 refresh(Object)
트리를 업데이트하여 지정된 모델 개체에서 트리를 새로 고칠 수 있습니다.
트리 구조가 변경되지 않은 경우 update(Object)
을 호출하면 단일 개체의 표시를 업데이트 할 수 있습니다.
또한 모델 트리에서 개체를 추가 및 제거 할 때 add
및 remove
메서드가 있습니다.
일부 방법에는 Object []
변형이 있으므로 일부 개체를 한 번에 수정할 수 있습니다.
업데이트 :
귀하의 모델은 콘텐츠 제공자를들을 수있는 모델 변경 이벤트의 생성을 지원해야한다. 이 수신기를 콘텐츠 공급자 inputChanged
메서드에서 설정하고 dispose
메서드에서 제거합니다. 모델 변경 이벤트가 수신되면 다양한 TreeViewer
메소드를 사용하여 트리를 업데이트하십시오.
이 모든 것이 사용되는 방법의 예는 작업 영역 (예 : 네비게이터보기)에 파일을 표시하는 Eclipse보기입니다. 이들을위한 컨텐트 프로 바이더는 작업 공간 리소스 변경 리스너 (IResourceChangeListener)를 사용하여 작업 공간에 대한 변경 사항을 통지하고 이벤트 정보를 사용하여 위에 나열된 메소드를 호출하여 트리를 업데이트합니다.
업데이트 2 : 콘텐츠 제공 업체에 IResourceChangeListener
를 사용 예, org.eclipse.ui.views.tasklist.TaskListContentProvider
class TaskListContentProvider
implements IStructuredContentProvider, IResourceChangeListener
{
private TableViewer viewer;
private IResource input;
... other methods ....
public void dispose() {
if (input != null) {
input.getWorkspace().removeResourceChangeListener(this);
input = null;
}
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
if (input != null) {
input.getWorkspace().removeResourceChangeListener(this);
}
input = (IResource) newInput;
if (input != null) {
input.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
}
viewer = (TableViewer) viewer;
}
public void resourceChanged(IResourceChangeEvent event) {
... use resource change event to update viewer
}
}
에서 추출한 예, 나는이 방법과 그 기능을 알고있다. 이미 여러 번 사용하고 있습니다. 그러나 여기에있는 질문은 내 트리 뷰어가 선택 리스너와 같은 모델을 명시 적으로 듣지 않고 기본 모델 변경을 인식하는 방법입니다. 그래서 새로 고침 메서드 등을 호출 할 수 있습니까? 아마도 모델에 리스너를 등록해야하고 내 모델은 inputChanged() 메서드를 올바르게 구현해야하지만 정확히 어떻게 그리고 어느 모델을 구현해야합니까? 아니면 모델 코드를 변경하지 않고 더 좋은 방법이 있습니까? – DanglingElse
기존 사용 예제와 모델 수신기를 추가 할 위치를 추가했습니다. –
업데이트 해 주셔서 감사합니다.하지만 여전히 어떤 문제가 있는지 알고 있습니다.inputChanged()의 사용법과 IResourceChangeListener를 등록하는 것에 대해 약간의 코드 스 니펫을 제공해 주시겠습니까? 고마워요! – DanglingElse