2010-09-27 16 views
5

Tengo un ScrolledComposite, cuyo contenido se está truncando. Busqué en Google y sé que es un problema conocido en Windows.SWT Tamaño máximo compuesto

La única solución sugerida que puedo encontrar es usar el canvas.scroll functionality.

Teniendo en cuenta la edad del problema, me preguntaba si hay una mejor solución?

¡Gracias!

(EDIT: En el momento de la escritura, el enlace fue: http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java?view=markup&content-type=text%2Fvnd.viewcvs-markup&revision=HEAD)

Respuesta

3

(el enlace informados dio un error 400)

No estoy seguro si mi problema era el mismo, pero se topó un problema de truncamiento con ScrolledComposite también. El problema fue que cuando redimensioné el Composite para ser desplazado y la barra de desplazamiento se hizo visible, los controles no tuvieron en cuenta el espacio ocupado por la barra de desplazamiento. Para resolver esto, agregué un tipo de código recursivo a mi escucha de Redimensionar en el compuesto desplazado:

Después de haber establecido el tamaño de su compuesto de contenido, compruebe si la barra de desplazamiento de scrolledComposite (getVerticalBar() por ejemplo) acaba de hacerse visible. Si es así, envíe un nuevo evento de Redimensionar a su oyente. Aquí hay un fragmento de mi código ...

public void handleEvent(Event event) 
{ 
    int newWidth = scrolledComposite.getSize().x; 
    boolean hasScroll = false; 
    ScrollBar scrollBar = scrolledComposite.getVerticalBar(); 
    if (scrollBar.isVisible()) 
    { 
     hasScroll = true; 
     newWidth -= scrolledComposite.getVerticalBar().getSize().x; 
    } 
    newWidth -= 8; 
    Point size = contentComposite.computeSize(newWidth, SWT.DEFAULT); 
    contentComposite.setSize(size); 

    int scroll_multiplier = size.y/50; 
    scrollBar.setIncrement(scroll_multiplier); 

    /** 
    * If the scroll bar became visible because of the resize, then 
    * we actually need to resize it again, because of the scroll 
    * bar taking up some extra space. 
    */ 
    if (scrollBar.isVisible() && !hasScroll) 
    { 
     scrolledComposite.notifyListeners(SWT.Resize, null); 
    } 
} 

Hope this helps!

Edit: wow No he notado la fecha de la OP. Espero que esto termine ayudando a alguien de alguna manera ...