JFace 표시기에 Java 요소 나타내기

JDT UI API는 표준 JFace 표시기에서 Java 모델 또는 이 모델의 파트를 나타내도록 하는 클래스를 제공합니다. 이 기능은 주로 다음에서 제공합니다.

JFace 표시기에 대한 컨텐츠 및 레이블 제공자는 JFace 표시기에 자세히 설명되어 있습니다.

기본 플랫폼 메커니즘을 이해하면 Java 컨텐츠 및 레이블 제공자를 간단하게 넣을 수 있습니다.
    ...
    TreeViewer viewer= new TreeViewer(parent);
    // Provide members of a compilation unit or class file, but no working copy elements
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // There are more flags defined in class JavaElementLabelProvider
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // Using the Java model as the viewers input present Java projects on the first level.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

위의 예제는 표시기에 대한 입력 요소로 aJava 모델(IJavaModel)을 사용합니다. 또한,  StandardJavaElementContentProvider는 입력 요소로 IJavaProject, IPackageFragmentRoot, IPackageFragmentIFolder도 지원합니다.

이미지를 Java 정보로 오버레이

JavaElementImageDescriptor는 임의의 기본 이미지 설명자에 기반한 이미지와 이미지 위에 첨가하는 Java 특정 장식(예: static, final, synchronized, ....)을 지정하는 플래그 세트를 작성하는 데 사용될 수 있습니다.

문제점 추가 및 데코레이터 대체

표시기가 문제점 어노테이션을 포함한다고 할 때, JFace DecoratingLabelProvider ProblemsLabelDecorator와 함께 사용됩니다. 아래의 스니펫은 문제점 레이블 데코레이터의 사용을 보여줍니다.
    ...
	DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());	
    viewer.setLabelProvider(decorator);
    ...

같은 방식으로 OverrideIndicatorLabelDecorator는 메소드에 대한 표시기 대체 및 구현을 표시하기 위해 일반 레이블 제공자를 데코레이트하는 데 사용될 수 있습니다.

모델 변경사항에 대한 프리젠테이션 갱신

OverrideIndicatorLabelDecorator 또는 ProblemsLabelDecorator는 모델 변경사항을 청취하지 않습니다. 따라서 Java 또는 자원 마커 모델이 변경할 경우 표시기는 모델의 프리젠테이션을 갱신하지 않습니다. 이러한 클래스에 대한 클라이언트에 갱신해야 하는 이유는 모든 성능과 관련하여 이행하는 일반 구현이 아직 없기 때문입니다. 각 레이블 데코레이터 또는 제공자에서 Java 모델 델타 검사 처리 및 표시기를 새로 고치면 다중 델타 검사 및 불필요한 표시기 갱신에 영향을 줍니다.

그렇다면 클라이언트는 표시기를 갱신하기 위해 무엇을 해야 합니까?

레이블 데코레이터에 대해 열거한 것과 같은 이유로 StandardJavaElementContentProvider 는 모델 변경사항을 청취하지 않습니다. 표시기가 Java 모델 변경사항에 따라 모델의 프리젠테이션을 갱신해야 한다면 클라이언트는 해당 리스너를 JavaCore에 추가해야 합니다. 델타로 설명하는 변경사항이 표시기에 나타난 요소의 구조를 무효화하면 클라이언트는 표준 JFace API를 사용하여 표시기를 갱신해야 합니다(StructuredViewer에 대한 새로 고치기 메소드, TableViewer 및 AbstractTreeViewer에 대한 추가 및 제거 메소드 참조).

표시기 정렬

JavaElementSorter는 JFace 표시기에 플러그인하여 Java UI 정렬 스타일에 따라 Java 요소를 정렬할 수 있습니다.