Pregunta

¿Qué hice mal?

Aquí es un extracto de mi código:

public void createPartControl(Composite parent) {
  parent.setLayout(new FillLayout());
  ScrolledComposite scrollBox = new ScrolledComposite(parent, SWT.V_SCROLL);
  scrollBox.setExpandHorizontal(true);
  mParent = new Composite(scrollBox, SWT.NONE);
  scrollBox.setContent(mParent);
  FormLayout layout = new FormLayout();
  mParent.setLayout(layout);
  // Adds a bunch of controls here
  mParent.layout();
  mParent.setSize(mParent.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
}

...pero clips el último botón:alt text

bigbrother82:Que no funciona.

SCdF:He probado tu sugerencia, y ahora las barras de desplazamiento se han ido.Tengo que trabajar un poco más en eso.

¿Fue útil?

Solución

Este es un obstáculo común cuando se utiliza ScrolledComposite.Cuando se vuelve tan pequeño que la barra de desplazamiento debe ser demostrado, el cliente de control para reducir horizontalmente para hacer espacio para la barra de desplazamiento.Esto tiene el efecto secundario de hacer que algunas etiquetas de ajustar líneas, que se movían los siguientes controles más abajo, que el aumento de la altura mínima necesaria por el contenido de compuestos.

Usted necesita escuchar a la anchura de los cambios en el contenido de compuestos (mParent), calcular la altura mínima más el nuevo contenido de la anchura, y la llamada setMinHeight() en la desplaza compuesto con la nueva altura.

public void createPartControl(Composite parent) {
  parent.setLayout(new FillLayout());
  ScrolledComposite scrollBox = new ScrolledComposite(parent, SWT.V_SCROLL);
  scrollBox.setExpandHorizontal(true);
  scrollBox.setExpandVertical(true);

  // Using 0 here ensures the horizontal scroll bar will never appear.  If
  // you want the horizontal bar to appear at some threshold (say 100
  // pixels) then send that value instead.
  scrollBox.setMinWidth(0);

  mParent = new Composite(scrollBox, SWT.NONE);

  FormLayout layout = new FormLayout();
  mParent.setLayout(layout);

  // Adds a bunch of controls here

  mParent.addListener(SWT.Resize, new Listener() {
    int width = -1;
    public void handleEvent(Event e) {
      int newWidth = mParent.getSize().x;
      if (newWidth != width) {
        scrollBox.setMinHeight(mParent.computeSize(newWidth, SWT.DEFAULT).y);
        width = newWidth;
      }
    }
  }

  // Wait until here to set content pane.  This way the resize listener will
  // fire when the scrolled composite first resizes mParent, which in turn
  // computes the minimum height and calls setMinHeight()
  scrollBox.setContent(mParent);
}

En la escucha de los cambios de tamaño, tenga en cuenta que nosotros ignorar cualquier tipo de eventos de cambio de tamaño en el que la anchura se mantiene el mismo.Esto es debido a que los cambios en la altura del contenido no afectan a la mínimo la altura del contenido, siempre y cuando el ancho es el mismo.

Otros consejos

Si no me equivoco, usted necesita para cambiar la

mParent.layout();

y

mParent.setSize(mParent.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));

así que usted tiene:

public void createPartControl(Composite parent) {
  parent.setLayout(new FillLayout());
  ScrolledComposite scrollBox = new ScrolledComposite(parent, SWT.V_SCROLL);
  scrollBox.setExpandHorizontal(true);
  mParent = new Composite(scrollBox, SWT.NONE);
  scrollBox.setContent(mParent);
  FormLayout layout = new FormLayout();
  mParent.setLayout(layout);
  // Adds a bunch of controls here
  mParent.setSize(mParent.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
  mParent.layout();
}

No es necesario volver a calcular el tamaño de la scrollBox después de la presentación?

Trate de configurar .setMinWidth y .setMinHeight en el ScrolledComposite una vez que el diseño ha sido hecho, pasándole el tamaño de los principales compuestos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top