swt在TabItem中加滚动条

需要在TabItem中加入ScrolledComposite,试了一天都没成功,常常遇到滚动条不见的问题。最后用曲折的方法搞定

核心代码如下


tabItem2.setControl(addSc(tabFolder1));

	/**
	 * 加入ScrolledComposite
	 * @param grandparent 必须是GridLayout
	 * @return
	 */
	private Composite addSc(Composite grandparent) {
		Composite parent=new Composite(grandparent, SWT.BORDER);
		//sc的父窗口必须是FillLayout
		parent.setLayout(new FillLayout());
		
		ScrolledComposite sc = new ScrolledComposite(parent, SWT.BORDER
				| SWT.V_SCROLL | SWT.H_SCROLL);

		Composite c = new Composite(sc, SWT.NONE);
		c.setSize(400, 400);
		c.setLayout(new GridLayout(1, true));

		for (int i = 0; i < 1000; i++) {
			new Button(c, SWT.PUSH).setText("Text" + i);
		}

		sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
		sc.setContent(c);
		sc.setExpandHorizontal(true);
		sc.setExpandVertical(true);
		sc.setAlwaysShowScrollBars(true);
		return parent;
	}


sc的父窗口必须是FillLayout型的,我本来想把tabFolder1设置成FillLayout的,让tabFolder1作为sc的父窗口,发现结果没有滚动条。后来就在tabFolder1创了一个子Composite,这个Composite设置成FillLayout,再在此Composite下创建sc就有滚动条了。



http://stackoverflow.com/questions/961545/swt-nested-layouts-with-scrolledcomposite-exceeds-available-space

这篇文章帮助非常大,实现了在一个子控件中显示滚动条。

这篇文章实现了在子控件中添加滚动条,注意sc父窗口必须是FillLayout,而且sc的父窗口sidebar垂直方向一点要是抢占的,即


     //最后一个参数必须是true,否则看不到ScrolledComposite
    sidebar.setLayoutData(new GridData(SWT.FILL,SWT.FILL,false,true));





你可能感兴趣的:(swt在TabItem中加滚动条)