En fournissant une interface API simple pour les vues et les éditeurs, également appelés composants "part", la trame de composant permet que des composants "part" existants soient imbriqués et composés. L'interface API de la trame de composant permet aux clients d'instancier des composants "part" dans des composites SWT arbitraires, améliore la robustesse et la résistance aux fuites en faisant communiquer un composant "part" avec les interfaces locales sur son site plutôt que d'atteindre des objets globaux, permet aux clients d'étendre l'ensemble des interfaces disponibles depuis un site et fournit une trame pour que les clients créent leurs propres composants réutilisables en utilisant la même API disponible pour les vues et les éditeurs. La trame de composant permet également la construction et la destruction d'un composant "part" avec des opérations atomiques et l'utilisation par des composants "part" existants de nouvelles interfaces de site.
Cet exemple simple fournit une vue qui fixe ses nom, titre, info-bulle et image et montre comment écrire un éditeur ou une vue en utilisant la trame de composant. Il présente la source en utilisant l'API composant. De nouveaux composants "part" peuvent prendre des arguments dans leur constructeur et n'ont pas besoin d'implémenter une interface particulière ou d'hériter d'une classe de base spécifique.
/**
* Sample view that sets its name, tooltip, image, and content description.
The view
* uses a custom image supplied by its plug-in.
*
* @since 3.1
*/
public class NameViewNew {
/**
* Component constructor. Do not invoke directly.
*/
public NameViewNew(Composite parent, INameable name, IPluginImages
images) {
name.setName("Name View (New)");
name.setContentDescription("content description");
name.setTooltip("This is a tooltip");
name.setImage(images.getImage("icons/sample.gif"));
// Create some bogus view contents
Label content = new Label(parent, SWT.NONE);
content.setText("View contents go here");
}
}
Notez que les arguments donnés au constructeur de la vue prennent déjà conscience de leur
contexte. Par exemple, l'interface IPluginImages n'a pas besoin qu'on lui dise à quel plug-in correspond la vue. De même, les interfaces résistent aux fuites. Dans cet exemple, l'image de la vue est allouée et libérée automatiquement par l'implémentation
INameable, et la vue n'a pas besoin d'implémenter elle-même une méthode "dispose".
Il est intéressant de remarquer que l'API pour vues et éditeurs est exactement le même. En d'autres mots, si nous avions choisi d'enregistrer la classe NameViewNew avec l'extension org.eclipse.ui.editors, elle aurait également pu être utilisée comme éditeur sans autre modification.