L'API de l'interface utilisateur du JDT fournit des classes permettant de présenter le modèle Java ou des parties du modèle dans un afficheur JFace standard. Cette fonctionnalité est fournie principalement par :
Les fournisseurs de contenu et de libellé pour les afficheurs JFace sont décrits en détails à la rubrique Afficheurs JFace.
Si vous maîtrisez le mécanisme de plateforme de base, le rassemblement des fournisseurs de libellés et de contenu Java est alors très simple :... TreeViewer viewer= new TreeViewer(parent); // Fournit les membres d'une unité de compilation ou d'un fichier classe, mais aucun élément de copie de travail ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false); viewer.setContentProvider(contentProvider); // D'autres indicateurs sont définis dans la classe JavaElementLabelProvider ILabelProvider labelProvider= new JavaElementLabelProvider( JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT); viewer.setLabelProvider(labelProvider); // L'utilisation du modèle Java comme entrée des afficheurs présente les projets Java au premier niveau. viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot())); ...
L'exemple ci-dessus utilise un modèle Java (IJavaModel) comme élément d'entrée de l'afficheur.StandardJavaElementContentProvider prend également en charge IJavaProject, IPackageFragmentRoot, IPackageFragment et IFolder comme éléments d'entrée.
JavaElementImageDescriptor peut être utilisée pour créer une image basée sur un descripteur d'image de base arbitraire et un ensemble d'indicateurs spécifiant les ornements Java spécifiques (static, final, synchronized...) à superposer sur l'image.
... DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator()); viewer.setLabelProvider(decorator); ...
De même, l'élément OverrideIndicatorLabelDecorator permet de décorer un fournisseur de libellé normal afin d'afficher les indicateurs d'implémentation et de remplacement pour les méthodes.
Ni l'élément OverrideIndicatorLabelDecorator, ni l'élément ProblemsLabelDecorator ne tient compte des modifications apportées au modèle. Par conséquent, l'afficheur ne met pas à jour sa présentation si le modèle Java ou le modèle de marqueur de ressource change. La raison pour laquelle il est judicieux de mettre à jour le client pour ces classes est qu'il n'existe pas encore d'implémentation générique répondant à tous les problèmes de performance. L'exécution de l'inspection delta du modèle Java et du rafraîchissement des afficheurs dans chaque décorateur de libellé ou dans chaque fournisseur entraînerait de nombreuses inspections delta et des mises à jour d'afficheurs inutiles.
Que doit faire le client pour mettre à jour les afficheurs ?
ProblemTreeViewer.handleLabelProviderChanged.
Pour les mêmes raisons que les décorateurs de libellés, StandardJavaElementContentProvider ne tient pas compte des modifications apportées au modèle. Si l'afficheur doit mettre à jour sa présentation en fonction des modifications apportées au modèle Java, le client doit ajouter un programme d'écoute approprié à JavaCore. Si la modification décrite par le delta invalide la structure des éléments présentés dans l'afficheur, le client doit mettre à jour l'afficheur à l'aide de l'API JFace standard (voir les méthodes de rafraîchissement dans StructuredViewer et les méthodes d'ajout et de suppression dans TableViewer et AbstractTreeViewer).
JavaElementSorter peut être connecté à un afficheur JFace pour trier les éléments Java selon le style de tri de l'interface utilisatur Java.