2011-10-17 14 views
6

Lo he intentado hasta ahora:¿Cómo puedo hacer una vista desplazable en una aplicación Eclipse RCP?

En createPartControl:

ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL); 
     sc.setLayoutData(new GridData(GridData.FILL_BOTH)); 
     sc.setExpandVertical(true); 
     sc.setExpandHorizontal(true); 
     sc.setSize(ApplicationWorkbenchWindowAdvisor.WIDTH, ApplicationWorkbenchWindowAdvisor.HEIGHT); 
     final TabFolder tabFolder = new TabFolder(sc, SWT.TOP); 

pero esto no funciona. Mi problema es que si cambio el tamaño de la ventana de mi programa, las barras de desplazamiento no aparecen en mi vista. ¿Algunas ideas?

Respuesta

7

El Javadoc of ScrolledComposite describe las dos formas de usarlo, incluido el código de ejemplo. Resumirlas:

  1. ya sea que ajuste el tamaño del control/compuesto contenida en su ScrolledComposite en el control/propio compuesto
  2. O le dice a su ScrolledComposite el tamaño mínimo de utilizar por su contenido.

Actualmente, usted no está haciendo ninguna de las dos cosas. Está configurando el tamaño en el ScrolledComposite, pero a menos que no use un administrador de diseño, eso no tiene mucho sentido. En cualquier caso, consulte el enlace anterior para obtener un código de ejemplo oficial.

+3

¡Muchas gracias! Ahora aprendí SIEMPRE a verificar javadoc antes de hacer preguntas estúpidas ... –

4

Esta es una pequeña pieza de código que funcionó para mí:

ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
    Composite composite = new Composite(sc, SWT.NONE); 
    sc.setContent(composite); 

    Label lblRelation = new Label(composite, SWT.NONE); 
    lblRelation.setBounds(10, 13, 74, 15); 
    lblRelation.setText("Label name:"); 
    composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
+0

funcionó para mí también. gracias – Michael

6

Normalmente, en vistas de Eclipse, quiero que mis controles para agarrar todo el espacio disponible, y sólo muestran las barras de desplazamiento, si de otro modo un control se reduciría por debajo un tamaño utilizable.

Las otras respuestas son perfectamente válidas, pero quería agregar un ejemplo completo de un método createPartControl (Eclipse e4).

@PostConstruct 
public void createPartControl(Composite parent) { 
    ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); 
    Composite composite = new Composite(sc, SWT.NONE); 
    sc.setContent(composite); 

    composite.setLayout(new GridLayout(2, false)); 

    Label label = new Label(composite, SWT.NONE); 
    label.setText("Foo"); 

    Text text = new Text(composite, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI); 
    GridDataFactory.fillDefaults().grab(true, true).hint(400, 400).applyTo(text); 

    sc.setExpandHorizontal(true); 
    sc.setExpandVertical(true); 
    sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
} 

Tenga en cuenta que .fillDefaults() implica .align(SWT.FILL, SWT.FILL).

comúnmente utilizo este patrón, así que creé el siguiente método poco de ayuda:

public static ScrolledComposite createScrollable(Composite parent, Consumer<Composite> scrollableContentCreator) { 
    ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
    Composite composite = new Composite(sc, SWT.NONE); 
    sc.setContent(composite); 

    scrollableContentCreator.accept(composite); 

    sc.setExpandHorizontal(true); 
    sc.setExpandVertical(true); 
    sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
    return sc; 
} 

Gracias a Java 8 lambdas, ahora se puede poner en práctica nuevos compuestos desplazables de una manera muy compacta:

createScrollable(container, composite -> { 
     composite.setLayout(new FillLayout()); 
     // fill composite with controls 
    }); 
+0

Obtengo el mismo resultado con o sin la llamada a 'setMinSize' que parece extraño ... Las barras de desplazamiento aparecen cuando mi editor se vuelve más pequeño que la sugerencia de tamaño en' GridData' de cualquier manera. Tal vez esto tiene que ver con el hecho de que es un editor de formularios de varias páginas ... – Lii

Cuestiones relacionadas