0

次のコードを使用して、TabItem "item2" の scrollcomposite を設定しようとしています。しかし、スクロールバーを取得できませんでした。

ここでは、item1 ではなく item2 のみに scrollcomposite / scrollbar を設定する必要がある 2 つの tabItem を作成しました。

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

これを解決するのを手伝ってください

4

1 に答える 1

1

ここでいくつかのこと。

最初にすべてのレイアウトを使用します。はtabFolder.setLocation混乱を招きますFillLayout。代わりに使用してください。

だから交換

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

shell.setLayout(new FillLayout());

次に、Composite2 番目のタブの は によって所有されている必要がありますScrolledComposite

だから変える

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

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

最後に、ScrolledCompositeは 2 番目のタブのコントロールでなければならないので、変更します

item2.setControl(comp2);

item2.setControl(sc);
于 2016-05-19T06:57:54.073 に答える