2011-10-17 11 views
6

Quello che ho provato finora:Come si può rendere una vista scorrevole in un'applicazione Eclipse RCP?

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

ma questo non funziona. Il mio problema è che se ridimensiono la finestra del mio programma le barre di scorrimento non appaiono nella mia vista. Qualche idea?

risposta

7

Il Javadoc of ScrolledComposite descrive i due modi per usarlo, incluso il codice di esempio. Per riassumere in su:

  1. Si sia impostare la dimensione del controllo/composito contenuta nel vostro ScrolledComposite sul controllo/composito stesso
  2. Oppure si informi il ScrolledComposite la dimensione minima da utilizzare per il suo contenuto.

Attualmente, non stai facendo nessuno dei due. Stai impostando la dimensione su ScrolledComposite, ma a meno che non utilizzi un gestore di layout, questo non ha molto senso. In ogni caso, vedi il link sopra per qualche codice di esempio ufficiale.

+3

Grazie mille! Ora ho imparato a controllare SEMPRE javadoc prima di fare domande stupide ... –

4

Questo è un piccolo pezzo di codice che ha funzionato per me:

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

ha funzionato anche per me. grazie – Michael

6

Tipicamente nelle viste Eclipse, voglio che i miei controlli per afferrare tutto lo spazio disponibile, e solo mostrare le barre di scorrimento, se altrimenti un controllo verrebbe ridotto al di sotto una dimensione utilizzabile

Le altre risposte sono perfettamente valide, ma volevo aggiungere un esempio completo di un metodo 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)); 
} 

Nota che .fillDefaults() implica .align(SWT.FILL, SWT.FILL).

Io comunemente uso questo modello, così ho creato il seguente metodo piccolo aiutante:

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

Grazie a Java 8 lambda, è ora possibile implementare nuovi compositi scorrevole in un modo molto compatto:

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

Ottengo lo stesso risultato con o senza la chiamata a 'setMinSize' che sembra strano ... Le barre di scorrimento appaiono quando il mio editor diventa più piccolo del suggerimento di dimensione nel' GridData' in entrambi i casi. Forse questo ha a che fare con il fatto che si tratta di un editor di moduli multipagina ... – Lii