请问各位高手们,TabFolder中的TabItem可以动态添加与删除么?(主要是删除,或者隐藏也行,即将TabFolder中某个TabItem与它关联控制的Composite隐藏)。盼各位不吝赐教。

解决方案 »

  1.   

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.TabFolder;
    import org.eclipse.swt.widgets.TabItem;
    public class tabfloder { protected Shell shell; TabItem[] tabItem = new TabItem[5];
    /**
     * Launch the application
     * @param args
     */
    public static void main(String[] args) {
    try {
    tabfloder window = new tabfloder();
    window.open();
    } catch (Exception e) {
    e.printStackTrace();
    }
    } /**
     * Open the window
     */
    public void open() {
    final Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    } /**
     * Create contents of the window
     */
    protected void createContents() {
    shell = new Shell();
    shell.setSize(500, 375);
    shell.setText("SWT Application"); final TabFolder tabFolder = new TabFolder(shell, SWT.NONE);
    tabFolder.setBounds(10, 10, 472, 321);
    new example(tabFolder,shell).start();
    new example2().start();

    //
    }

    public class example extends Thread{
    TabFolder tabFolder;
    Shell shell;
    public example(TabFolder tabFolder,Shell shell){
    this.tabFolder = tabFolder;
    this.shell=shell;
    }
    public void run(){
    Display.getDefault().asyncExec(new Runnable(){ @Override
    public void run() {
    // TODO Auto-generated method stub
    //new TabItem(tabFolder, SWT.NONE);
    for(int i=0;i<5;i++){
    tabItem[i] = new TabItem(tabFolder, SWT.NONE);
    final Button button = new Button(tabFolder, SWT.NONE);
    for(int j=0;j<50;j++)
    button.setText("button");
    tabItem[i].setControl(button);
    shell.layout();
    }
    }

    });

    }
    }

    public class example2 extends Thread{
    public void run(){
    try {
    sleep(3000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Display.getDefault().asyncExec(new Runnable(){ @Override
    public void run() {
    // TODO Auto-generated method stub
    for(int i=0;i<5;i++)
    tabItem[i].dispose();
    }

    });

    }
    }}
      

  2.   

    可以实现
    /*
     * Created on 2008/04/29
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package swt;import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Group;
    import org.eclipse.swt.widgets.TabFolder;
    import org.eclipse.swt.widgets.TabItem;
    import org.eclipse.swt.custom.ScrolledComposite;
    import org.eclipse.swt.events.ControlAdapter;
    import org.eclipse.swt.events.ControlEvent;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.events.SelectionListener;
    import org.eclipse.swt.graphics.Point;/**
     * @author qingkangxu
     * 
     * TODO To change the template for this generated type comment go to Window -
     * Preferences - Java - Code Style - Code Templates
     */
    public class TabFolderClose { public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display, SWT.SHELL_TRIM);
    shell.setText("TabFolder");
    shell.setLayout(new FillLayout()); TabFolder folder = new TabFolder(shell, SWT.NONE);
    final TabItem item1 = new TabItem(folder, SWT.NONE);
    item1.setText("label"); // create the sc
    final ScrolledComposite sc = new ScrolledComposite(folder, SWT.V_SCROLL);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
    sc.getVerticalBar().setIncrement(5); // create the composite on the sc
    final Composite endpointComp = new Composite(sc, SWT.NONE);
    GridData suGridData = new GridData(GridData.FILL_BOTH);
    endpointComp.setLayoutData(suGridData);
    endpointComp.setLayout(new GridLayout(1, true));
    // add button to the endpointComp
    addCompToEndpointComp(endpointComp); sc.addControlListener(new ControlAdapter() {
    public void controlResized(ControlEvent e) { Point p = endpointComp.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    sc.setMinSize(p.x, p.y + 10);
    endpointComp.layout();
    }
    });
    sc.setContent(endpointComp);
    item1.setControl(sc); TabItem item2 = new TabItem(folder, SWT.NONE);
    item2.setText("radio");
    Group group2 = new Group(folder, SWT.NONE);
    group2.setText("Radio Group");
    group2.setLayout(new GridLayout());
    Button btn2 = new Button(group2, SWT.PUSH);
    btn2.setText("Close \"label\" Item");
    item2.setControl(group2);
    btn2.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) {
    } public void widgetSelected(SelectionEvent arg0) {
    item1.dispose(); }
    }); folder.setSelection(1);
    folder.setSelection(new TabItem[] { item2 });
    shell.setVisible(true); while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    display.dispose();
    } private static void addCompToEndpointComp(Composite endpointComp) {
    for (int i = 0; i < 20; i++) {
    Button button = new Button(endpointComp, SWT.PUSH);
    button.setText("ForTestBtn" + i);
    button.setLayoutData(new GridData());
    }
    }}
      

  3.   

    补充一下,其实SWT中的很多Control,调用dispose()方法便可消除!