2010-09-27 16 views
5

Ho un oggetto Scrolled, i cui contenuti vengono troncati. Ho cercato su Google e sono consapevole che si tratta di un problema noto su Windows.SWT Composite dimensione massima

L'unica soluzione suggerita che riesco a trovare è utilizzare canvas.scroll functionality.

Data l'età del problema, mi chiedevo se c'è una soluzione migliore?

Grazie!

(EDIT: Al momento della scrittura, il collegamento era: 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)

risposta

3

(il link che hai postato ha dato un errore 400)

Non sono sicuro se il mio problema era lo stesso, ma mi sono imbattuto in anche un problema di troncamento con ScrolledComposite. Il problema era che quando ho ridimensionato il Composito per scorrere e la barra di scorrimento è diventata visibile, i controlli non hanno tenuto conto dello spazio occupato dalla barra di scorrimento. Per risolvere questo problema, ho aggiunto un tipo di codice ricorsivo al mio listener Resize sul composito a scorrimento:

Dopo aver impostato la dimensione del contenuto composito, controllare se la barra di scorrimento di ScrolledComposite (getVerticalBar() ad esempio) è appena diventato visibile. In tal caso, invia un nuovo evento di ridimensionamento al listener. Ecco uno snippet dal mio codice ...

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); 
    } 
} 

Spero che questo aiuti!

Modifica: wow Non ho notato la data dell'OP. Spero che questo finisca per aiutare qualcuno in entrambi i modi ...

Problemi correlati