2016-05-19 10 views
0

Ich versuche den folgenden Code Scrollcomposite für TabItem "item2" festlegen. Aber die Bildlaufleiste konnte nicht gefunden werden.Wie setze ich scrollcomposite für ein TabItem in SWT?

Hier habe ich zwei TabItem, wo ich brauche scrollcomposite/Scrollbar setzen für ELEMENT2 nicht nur für item1

Display display = new Display(); 
final Shell shell = new Shell(display); 
final TabFolder tabFolder = new TabFolder(shell, SWT.BORDER); 
Rectangle clientArea = shell.getClientArea(); 
tabFolder.setLocation(clientArea.x, clientArea.y); 
// First Tab Item 
TabItem item = new TabItem(tabFolder, SWT.NONE); 
item.setText("TabItem " + 1); 
Composite comp = new Composite(tabFolder, SWT.NONE); 
GridLayout gl = new GridLayout(); 
GridData wgd = new GridData(GridData.FILL_BOTH); 
comp.setLayout(gl); 
comp.setLayoutData(wgd); 
Button button = new Button(comp, SWT.PUSH); 
button.setText("Page " + 1); 
Button button2 = new Button(comp, SWT.PUSH); 
button2.setText("Page " + 1); 
Button button3 = new Button(comp, SWT.PUSH); 
button3.setText("Page " + 1); 
Button button4 = new Button(comp, SWT.PUSH); 
button4.setText("Page " + 1); 
item.setControl(comp); 

ScrolledComposite sc = new ScrolledComposite(tabFolder, SWT.BORDER 
      | SWT.H_SCROLL | SWT.V_SCROLL); 

// second tab item 
TabItem item2 = new TabItem(tabFolder, SWT.NONE); 
item2.setText("TabItem " + 1); 
Composite comp2 = new Composite(tabFolder, SWT.NONE); 
GridLayout gl2 = new GridLayout(); 
GridData wgd2 = new GridData(GridData.FILL_BOTH); 
comp2.setLayout(gl2); 
comp2.setLayoutData(wgd2); 
Button buttonq = new Button(comp2, SWT.PUSH); 
buttonq.setText("Page " + 1); 
Button button2q = new Button(comp2, SWT.PUSH); 
button2q.setText("Page " + 1); 

sc.setContent(comp2); 
sc.setExpandHorizontal(true); 
sc.setExpandVertical(true); 
sc.setMinSize(comp2.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
sc.setShowFocusedControl(true); 
item2.setControl(comp2); 

tabFolder.pack(); 
shell.pack(); 
shell.open(); 
while (!shell.isDisposed()) { 
    if (!display.readAndDispatch()) 
     display.sleep(); 
} 
display.dispose(); 

Wenn ich folgenden Code hinzugefügt, war tabItem2 leer:

item2.setControl(comp2); 

Bitte helfen Sie mir, dies zu lösen

Antwort

1

Mehrere Dinge hier.

Verwenden Sie zuerst Layouts für alles. Die tabFolder.setLocation verursacht Verwirrung, verwenden Sie stattdessen FillLayout.

Rectangle clientArea = shell.getClientArea(); 
tabFolder.setLocation(clientArea.x, clientArea.y); 

mit

shell.setLayout(new FillLayout()); 

Zweite So ersetzen, die Composite für das zweite Register müssen von der ScrolledComposite gehören.

So

ändern
Composite comp2 = new Composite(tabFolder, SWT.NONE); 

zu

Composite comp2 = new Composite(sc, SWT.NONE); 

Schließlich wird die ScrolledComposite die Steuerung für den zweiten Registerkarte sein muss, so ändern

item2.setControl(comp2); 

zu

item2.setControl(sc);