2017-04-06 56 views
0

我有一個非常困難的時間試圖找到一個滾動條在TabFolder內按預期工作的示例。以下是示例代碼。任何人都可以告訴我我做錯了什麼,或者如果它是一個錯誤?ScrolledComposite將不會顯示在TabFolder

import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.ScrolledComposite; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.TabFolder; 
import org.eclipse.swt.widgets.TabItem; 
import org.eclipse.swt.widgets.Text; 

public class Test { 
    public static void main(String[] args) { 
     Display display = new Display(); 

     Shell shell = new Shell(display, SWT.SHELL_TRIM); 
     shell.setLayout(new GridLayout(1, false)); 

     TabFolder tabFolder = new TabFolder(shell, SWT.NULL); 

     TabItem tab = new TabItem(tabFolder, SWT.NULL); 

     ScrolledComposite scrolledComposite = new ScrolledComposite(tabFolder, 
      SWT.H_SCROLL | SWT.V_SCROLL); 
     scrolledComposite.setExpandHorizontal(true); 
     scrolledComposite.setExpandVertical(true); 
     scrolledComposite.setLayout(new GridLayout(1, false)); 
     scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, 
      true, true)); 

     Composite innerComposite = new Composite(scrolledComposite, SWT.NULL); 
     for (int x = 0; x < 20; x++) { 
      Text t = new Text(innerComposite, SWT.BORDER); 
      t.setText(x + ""); 
     } 
     innerComposite.setLayout(new GridLayout(2, false)); 
     innerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, 
      true)); 

     scrolledComposite.setContent(innerComposite); 
     scrolledComposite.setMinSize(scrolledComposite.computeSize(SWT.DEFAULT, 
      SWT.DEFAULT)); 
     tab.setControl(scrolledComposite); 

     shell.setSize(100, 100); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!shell.getDisplay().readAndDispatch()) { 
       shell.getDisplay().sleep(); 
      } 
     } 
     display.dispose(); 
    } 
} 

回答

1

這裏有很多問題。請參閱代碼中的註釋:

TabFolder tabFolder = new TabFolder(shell, SWT.NULL); 

// Must set layout data for Shell GridLayout 
tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

TabItem tab = new TabItem(tabFolder, SWT.NULL); 

ScrolledComposite scrolledComposite = new ScrolledComposite(tabFolder, SWT.H_SCROLL | SWT.V_SCROLL); 
scrolledComposite.setExpandHorizontal(true); 
scrolledComposite.setExpandVertical(true); 

// ScrolledComposite ignores setLayout 
// scrolledComposite.setLayout(new GridLayout(1, false)); 
// TabFolder doesn't use GridData 
// scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

Composite innerComposite = new Composite(scrolledComposite, SWT.NULL); 
for (int x = 0; x < 20; x++) { 
    final Text t = new Text(innerComposite, SWT.BORDER); 
    t.setText(x + ""); 
} 
innerComposite.setLayout(new GridLayout(2, false)); 
innerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

scrolledComposite.setContent(innerComposite); 

// MinSize should be the computed size of the inner composite 
scrolledComposite.setMinSize(innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

tab.setControl(scrolledComposite); 
+0

太棒了,非常感謝您的更正和解釋! – ekjcfn3902039