Το API του περιβάλλοντος χρήστη JDT παρέχει κλάσεις που σας επιτρέπουν την παρουσίαση του μοντέλου Java ή τμημάτων του σε μια τυπική λειτουργία προβολής JFace. Η λειτουργικότητα αυτή παρέχεται κυρίως από τις κλάσεις:
Οι παροχείς περιεχομένου και ετικετών για λειτουργίες προβολής 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())); ...
Το παραπάνω παράδειγμα χρησιμοποιεί ένα μοντέλο Java (IJavaModel) ως στοιχείο εισόδου για τη λειτουργία προβολής. Η κλάση StandardJavaElementContentProvider υποστηρίζει επίσης τις διεπαφές IJavaProject, IPackageFragmentRoot, IPackageFragment και IFolder ως στοιχεία εισόδου:
Η κλάση JavaElementImageDescriptor μπορεί να χρησιμοποιηθεί για τη δημιουργία μιας εικόνας με βάση ένα αυθαίρετο αρχείο περιγραφής εικόνας και ένα σύνολο ενδεικτών που προσδιορίζουν τα ειδικά διακριτικά Java (π.χ. στατική, τελική, συγχρονισμένη, ...) που πρόκειται να υπερτεθούν στην εικόνα.
... DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator()); viewer.setLabelProvider(decorator); ...
Με τον ίδιο τρόπο, η κλάση OverrideIndicatorLabelDecorator μπορεί να χρησιμοποιηθεί για την προσθήκη διακριτικού σε έναν κανονικό παροχέα ετικέτας, για την υπόδειξη των ενδείξεων υλοποίησης και αντικατάστασης για μεθόδους.
Ούτε η κλάση OverrideIndicatorLabelDecorator ούτε η ProblemsLabelDecorator μπορεί να λειτουργήσει για την ακρόαση αλλαγών μοντέλου. Έτσι, η λειτουργία προβολής δεν ενημερώνει την παρουσίασή της εάν το μοντέλο Java ή δείκτη πόρου αλλάξει. Ο λόγος για την προώθηση της ενημέρωσης στον πελάτη για τις κλάσεις αυτές είναι ότι δεν υπάρχει ακόμη μια γενική υλοποίηση η οποία να ικανοποιεί όλες τις απαιτήσεις απόδοσης. Ο χειρισμός της επιθεώρησης τροποποιημένων στοιχείων μοντέλου Java και της ανανέωσης της λειτουργίας προβολής σε κάθε διακριτικό ετικέτας ή παροχέα θα οδηγούσε σε πολλές επιθεωρήσεις τροποποιημένων στοιχείων και περιττές ενημερώσεις της λειτουργίας προβολής.
Επομένως, τι πρέπει να κάνει ένας πελάτης προκειμένου να ενημερώνει τις λειτουργίες προβολής;
ProblemTreeViewer.handleLabelProviderChanged.
Για τους ίδιους λόγους, οι οποίοι απαριθμούνται για τα διακριτικά ετικετών, η κλάση StandardJavaElementContentProvider δεν έχει τη δυνατότητα ακρόασης των αλλαγών του μοντέλου. Αν η λειτουργία προβολής πρέπει να ενημερώσει την παρουσίασή της σύμφωνα με τις αλλαγές του μοντέλου Java, τότε ο πελάτης θα πρέπει να προσθέσει μια αντίστοιχη λειτουργία ακρόασης στην JavaCore. Εάν η αλλαγή που περιγράφεται από το τροποποιημένο στοιχείο ακυρώνει τη δομή των στοιχείων που παρουσιάζονται στη λειτουργία προβολής, τότε ο πελάτης θα πρέπει να ενημερώσει τη λειτουργία προβολής χρησιμοποιώντας το τυπικό API JFace (δείτε τις μεθόδους ανανέωσης στην κλάση StructuredViewer, καθώς και τις μεθόδους προσθήκης και αφαίρεσης στις κλάσεις TableViewer και AbstractTreeViewer).
Η κλάση JavaElementSorter μπορεί να συνδεθεί σε μια λειτουργία προβολής JFace για την ταξινόμηση των στοιχείων Java σύμφωνα με το στυλ ταξινόμησης του περιβάλλοντος χρήστη Java.