2016-05-19 6 views
0

Я пытаюсь использовать следующий код для установки scrollcomposite для TabItem "item2". Но не удалось получить полосу прокрутки.Как установить scrollcomposite для одного TabItem в SWT?

Здесь я создал два TabItem, где нужно установить scrollcomposite/скроллбар только для ITEM2 не 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(); 

Когда я добавил следующий код, tabItem2 был пуст:

item2.setControl(comp2); 

Помогите мне решить эту проблему

ответ

1

Несколько вещей здесь.

Первоначальные макеты для всего. tabFolder.setLocation вызывает путаницу, вместо этого используйте FillLayout.

Так заменить

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

с

shell.setLayout(new FillLayout()); 

Во-вторых, Composite на второй вкладке должна принадлежать ScrolledComposite.

Меняем

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

в

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

Наконец ScrolledComposite должен быть контроль за второй вкладке, поэтому изменить

item2.setControl(comp2); 

в

item2.setControl(sc);