Al proporcionar una API simple para vistas y editores, también conocidos como componentes, la Infraestructura de componentes permite añadir y componer los componentes existentes. La API de infraestructura de componentes permite a los clientes crear instancias de componentes dentro de compuestos SWT arbitrarios, mejora la solidez y la capacidad a prueba de fugas al hacer que un componente se comunique con interfaces locales en su sitio en lugar de alcanzar objetos globales, permite a los clientes ampliar el conjunto de interfaces disponible en un sitio y proporciona una infraestructura para los clientes para crear sus propios componentes reutilizables utilizando la misma API disponible para vistas y editores. La infraestructura de componentes también permite construir y destruir un componente con operaciones atómicas y permite que los componentes existentes utilicen nuevas interfaces de sitio.
Este ejemplo sencillo proporciona una vista que establece su
nombre, título, ayuda flotante e imagen y muestra cómo escribir un editor o una
vista utilizando la infraestructura de componentes. Muestra el origen utilizando la API de componentes. Los componentes nuevas pueden
tomar argumentos en su constructor y no es necesario implementar ninguna
interfaz en particular ni tienen que heredar de ninguna clase básica en
particular.
/**
* Vista de ejemplo que establece su nombre, ayuda flotante, imagen y
descripción de contenido.
La vista
* utiliza una imagen personalizada proporcionada por su conector.
*
* @since 3.1
*/
public class NameViewNew {
/**
* Constructor de componentes. No debe invocarse directamente.
*/
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"));
// Crear contenido ficticio de vista
Label content = new Label(parent, SWT.NONE);
content.setText("View contents go here");
}
}
Observe que los argumentos proporcionados al constructor de la vista ya
conocen su contexto. Por ejemplo, no es necesario indicar a la interfaz de IPluginImages a qué
conector pertenece la vista. De forma similar, las interfaces son resistentes a las fugas. En este ejemplo, la imagen de la vista se asigna y se desasigna automáticamente
con la implementación de INameable, de manera que no es necesario que la propia
vista implemente un método de desecho.
Es interesante observar que la API para vistas y editores sea exactamente la
misma. En otras palabras, si se hubiese elegido registrar la clase NameViewNew con el
punto de extensión org.eclipse.ui.editors, también podría utilizarse como
editor sin modificaciones adicionales.