2013-07-05 11 views
8

ScrolledForm 's scrollBar kann manchmal Probleme verursachen. Ich habe das gleiche Problem mit this guy in EclipseZone Forum (es ist eine Frage im Jahr 2005 gestellt, scheint aber ungelöst zu sein).Wie Scrollbar in ScrolledForm zu deaktivieren?

//The scrollbar should only be displayed in the TreeViewer,not the whole form The scrollbar should only be displayed in the TreeViewer,not the whole form.

+1

Verwenden Sie also keine Bildlaufform. Verwenden Sie einen anderen Behälter. – jarodeells

+1

@jarodeells Das liegt daran, dass die Methode 'getForm()' von ManagedForm ein ScrolledForm zurückgibt (http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi% 2Forg% 2Feclipse% 2Fui% 2Fforms% 2FManagedForm.html) –

+1

Konnten Sie Ihr Problem mit @janhinks Beispiel lösen? Ich habe scheinbar das gleiche Problem, bin aber nicht in der Lage, diese Lösung zum Laufen zu bringen. Sie haben also eine gefunden, bei der ich neugierig bin, was nötig war, um es zum Laufen zu bringen. – NealSr

Antwort

3

Ich habe mehrmals quer durch dieses Problem kommen und löste es wie folgt aus:

@Override 
protected void createFormContent(IManagedForm managedForm) { 
    // set the form's body's layout to GridLayout 
    final Composite body = managedForm.getForm().getBody(); 
    body.setLayout(new GridLayout()); 

    // create the composite which should not have the scrollbar and set its layout data 
    // to GridData with width and height hints equal to the size of the form's body 
    final Composite notScrolledComposite = managedForm.getToolkit().createComposite(body); 
    final GridData gdata = GridDataFactory.fillDefaults() 
      .grab(true, true) 
      .hint(body.getClientArea().width, body.getClientArea().height) 
      .create(); 
    notScrolledComposite.setLayoutData(gdata); 

    // add resize listener so the composite's width and height hints are updates when 
    // the form's body resizes 
    body.addControlListener(new ControlAdapter() { 
     @Override 
     public void controlResized(ControlEvent e) { 
      super.controlResized(e); 
      gdata.widthHint = body.getClientArea().width; 
      gdata.heightHint = body.getClientArea().height; 
      notScrolledComposite.layout(true); 
     } 
    }); 
} 

Beachten Sie die GridLayout im Körper der Form und dann die Breite und Höhe einstellen hint auf die Komposit GridLayoutData.

Beachten Sie auch die Größe Listener auf den Körper, der die Rasterlayoutdaten aktualisiert und das Composite-Layout.

Hoffe es hilft!

+0

Vielen Dank für Ihr Codebeispiel. Ich habe versucht, die NotScrolledComposite als Eltern Composite für meine SashForm zu verwenden und anstatt die Bildlaufleiste auf der rechten Seite zu entfernen, verschwindet das gesamte innere Steuerelement. Musstest du etwas Besonderes machen, wenn du diesen Fix benutzt hast? – NealSr

+0

Haben Sie ein geeignetes Layout für den nicht gescannten Composite festgelegt? – janhink