편집기에는 편집기 컨텐츠에 대한 구조화된 보기를 제공하고 편집기 컨텐츠의 탐색을 지원하는 해당 컨텐츠 아웃라이너가 있는 경우가 많습니다.
Workbench는 이런 목적으로 표준 아웃라인 보기를 제공합니다. Workbench 사용자는 창 >보기 표시 메뉴를 사용하여 이 보기를 볼 수 있는 시기를 제어합니다.
일반 TextEditor는 텍스트 구조를 알지 못하기 때문에 흥미로운 아웃라인 보기에 대한 작동을 제공할 수 없습니다. 따라서 아래 표시된 기본 아웃라인 보기는 많은 역할을 수행하지 못합니다.

텍스트 프레임워크의 편집기는 고유한 컨텐츠 아웃라이너 페이지를 아웃라인 보기에 제공할 수 있습니다. 편집기 아웃라이너는 Workbench가 IContentOutlinePage 유형 어댑터를 요청할 때 지정됩니다.
public Object getAdapter(Class required) {
if (IContentOutlinePage.class.equals(required)) {
if (fOutlinePage == null) {
fOutlinePage= new JavaContentOutlinePage(getDocumentProvider(), this);
if (getEditorInput() != null)
fOutlinePage.setInput(getEditorInput());
}
return fOutlinePage;
}
return super.getAdapter(required);
}
컨텐츠 아웃라이너 페이지는 IContentOutlinePage를 구현해야 합니다. 이 인터페이스는 선택사항 변경 리스너(ISelectionProvider)에 알리는 기능을 보기(IPage)의 페이지에 작동과 결합합니다. 컨텐츠 아웃라이너는 일반적으로 JFace 표시기를 사용하여 구현됩니다. 컨텐츠 아웃라이너(ContentOutlinePage)의 기본 구현은 JFace 트리 표시기를 사용하여 아웃라인의 계층 구조 표시를 표시합니다. 이 표시는 JavaContentOutlinePage를 포함하여 다수의 구조화된 아웃라이너에 적합합니다.
페이지의 구현을 좀 더 자세히 살펴 봅시다. 위 스니펫에서 편집기로 아웃라인 페이지가 작성될 때 해당 입력 요소가 편집기의 입력 요소로 설정됩니다. 이 입력은 종종 아래 예처럼 아웃라인 페이지의 표시기로 직접 전달될 수 있습니다.
public void createControl(Composite parent) {
super.createControl(parent);
TreeViewer viewer= getTreeViewer();
viewer.setContentProvider(new ContentProvider());
viewer.setLabelProvider(new LabelProvider());
viewer.addSelectionChangedListener(this);
if (fInput != null)
viewer.setInput(fInput);
}
트리 표시기 작성은 ContentOutlinePage에서 상속됩니다. 표준 레이블 제공자가 사용됩니다. 컨텐츠 제공자가 JavaContentOutlinePage 내부에 제공되며, 이 제공자는 편집기가 변경될 때마다 이를 개별 세그먼트로 구문 분석해야 합니다.
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
...
if (newInput != null) {
IDocument document= fDocumentProvider.getDocument(newInput);
if (document != null) {
document.addPositionCategory(SEGMENTS);
document.addPositionUpdater(fPositionUpdater);
parse(document);
}
}
}
텍스트는 문서 내의 세그먼트라는 범위로 구문 분석됩니다. 이 세그먼트는 아웃라인 보기에서 표시됩니다.

선택사항이 변경되면 선택된 세그먼트가 검색됩니다. 해당 오프셋이 편집기의 강조표시 범위를 설정하는 데 사용됩니다.
public void selectionChanged(SelectionChangedEvent event) {
super.selectionChanged(event);
ISelection selection= event.getSelection();
if (selection.isEmpty())
fTextEditor.resetHighlightRange();
else {
Segment segment= (Segment) ((IStructuredSelection) selection).getFirstElement();
int start= segment.position.getOffset();
int length= segment.position.getLength();
try {
fTextEditor.setHighlightRange(start, length, true);
} catch (IllegalArgumentException x) {
fTextEditor.resetHighlightRange();
}
}
}