SWT通过TabFolder和TabItem两个类来完成Tabbed Folder。
1.创建TabFolder的对象
TabFolder tf=new TabFolder(s,SWT.NONE);
TabFolder本身没有内含的样式,但是还必须传入置放样式的空间,所以SWT.NONE是为此目的而使用的。
2.创建单独的Tab
每个Tab都是由TabItem类的对象来表示的。创建出TabItem的新的对象给每个folder并将它加入到之前创建的TabFolder对象上。
TabItem ti1=new TabItem(tf,SWT.NONE);
ti1.setText("Tab one");
传给TabItem的第一个参数是TabFolder的引用,因为TabItem也没有接受样式属性,所以传入SWT.NONE
3.将Widget加入到Tab中
创建Tabbed Folder界面的最后一步是将control加入tab页中。
ti1.setControl(new Button(tf,SWT.PUSH));
可以看出传给setControl函数的第一个参数是TabFolder而不是TabItem,这是因为TabItem并不是从Composite继承而来的,且无法作为其他widget的容器。放置于TableItem的Control实际上是位于TabFolder中,并且只是在用户切换页面的时候跟着切换成显示或者隐藏而已。
4.完整的实例
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class TabbedShellExample {
Display d;
Shell s;
TabbedShellExample(){
d=new Display();
s=new Shell(d);
s.setSize(350, 300);
s.setText("Tabbed Shell!");
s.setLayout(new FillLayout());
TabFolder tf=new TabFolder(s,SWT.NONE);
TabItem ti1=new TabItem(tf,SWT.NONE);
ti1.setText("Option Group");
ti1.setControl(new GroupComposite(tf,SWT.SHADOW_ETCHED_IN));
TabItem ti2=new TabItem(tf,SWT.NONE);
ti2.setText("Grid ");
ti2.setControl(new Button(tf,SWT.PUSH));
TabItem ti3=new TabItem(tf,SWT.NONE);
ti3.setText("Text ");
Composite c1=new Composite(tf,SWT.BORDER);
c1.setLayout(new FillLayout());
Text t=new Text(c1,SWT.BORDER|SWT.MULTI|SWT.WRAP|SWT.V_SCROLL);
ti3.setControl(c1);
TabItem ti4=new TabItem(tf,SWT.NONE);
ti4.setText("Settings");
Composite c2=new Composite(tf,SWT.NONE);
c2.setLayout(new RowLayout());
Text t2=new Text(c2,SWT.BORDER|SWT.SINGLE|SWT.WRAP|SWT.V_SCROLL);
Button b=new Button(c2,SWT.PUSH|SWT.BORDER);
b.setText("Save");
ti4.setControl(c2);
tf.setSelection(3);
s.open();
while(!s.isDisposed())
if(!d.readAndDispatch())
d.sleep();
d.dispose();
}
public static void main(String args[]){
new TabbedShellExample();
}
}
class GroupComposite extends Composite{
final Button b1,b2,b3;
public GroupComposite(Composite arg0, int arg1) {
super(arg0, SWT.NO_BACKGROUND);
this.setSize(110,75);
this.setLayout(new FillLayout());
final Group g=new Group(this,arg1);
g.setSize(110,75);
g.setText("Options Group");
b1=new Button(g,SWT.RADIO);
b1.setBounds(10, 20,85, 15);
b1.setText("Option One");
b2=new Button(g,SWT.RADIO);
b2.setBounds(10, 35, 85, 15);
b2.setText("Option Two");
b3=new Button(g,SWT.RADIO);
b3.setText("Option Three");
b3.setBounds(10, 50,100,15);
// TODO Auto-generated constructor stub
}
public String getSelected(){
if(b1.getSelection())return "option one";
if(b2.getSelection())return "option two";
if(b3.getSelection())return "option three";
return "None Selection";
}
}
5.设定默认的Tab
要强制某个Tab显示在前端,可以用方法:tf.setSelection(i);
要判断当前所选取的是哪个tab,可以用方法:tf.getSelectionIndex();