how to add more than one items in one CTabItem?

2.1k views Asked by At
CTabItem tabItem1 = new CTabItem(newTabFolder, SWT.CLOSE);
tabItem1.setText("Tab 1");
Label lab2 = new Label(newTabFolder, 0);
lab2.setText("Hello World");
tabItem1.setControl(table);
tabItem1.setControl(lab2);

I am trying to have a CTabItem which has a table and some labels and textfields

But the problem arising is that any item/widget is added by use of setControl(Control control) function. And I cannot pass more than two controls. The code above adds a table first and then over writes it with the label, hence showing only one item at a time.

And I want both things at one time.

I have also tried to see if I might add things to an object of Control and then pass that control to setControl() function but I could not find any function by which I can add items/widgets to control please tell me how to do this.

final Composite compositeInTab = new Composite(newTabFolder, SWT.NONE);
        compositeInTab.setLayout(new FillLayout());
        table = new Table(compositeInTab, SWT.V_SCROLL);

        btn1.addMouseListener(new MouseAdapter()
        {
            public void mouseDown(MouseEvent e)
            {
                /*JUST CREATING A TABLE AND MANAGING IT*/
                String[] titles = {"System Code","Domain Name","Organizational Unit","Organization Name"};
                for(int i=0; i<titles.length; i++)
                {
                    TableColumn column = new TableColumn(table, SWT.CENTER, i);
                    column.setText(titles[i]);
                    column.setWidth(150);
                    column.setMoveable(true);
                    column.setResizable(true);
                }
                for(int i=0; i<50; i++)
                {
                    TableItem item = new TableItem(table, 0);
                    item.setText(0, ""+i);
                    item.setText(1, ""+i);
                    item.setText(2, ""+i);
                    item.setText(3, ""+i);
                }
                for (int i = 0; i < titles.length; i++) 
                {
                    table.getColumn(i).pack();
                }
                table.setHeaderVisible(true);
                table.setSize(table.computeSize(SWT.DEFAULT, 200));
                table.setLinesVisible(true);
                /*CREATING OF TABLE COMPLETE*/

                compositeForTabFolder.setLayout(new GridLayout());
                compositeForTabFolder.setBounds(280, 0, 500, 450);
                newTabFolder.setUnselectedCloseVisible(false);

                CTabItem tabItem1 = new CTabItem(newTabFolder, SWT.CLOSE);
                tabItem1.setText("Tab 1");
                Label lab2 = new Label(compositeInTab, 0);
                lab2.setText("Hello World");
                Label lab3 = new Label(compositeInTab, 0);
                lab3.setText("Bye Bye World");
                tabItem1.setControl(compositeInTab);

                newTabFolder.setBounds(0, 0, 500, 300);
            }
        });

Image

1

There are 1 answers

8
Baz On BEST ANSWER

You could use a Composite, then add everything you want to this Composite and afterwards use setControl(composite).

This way, you will only have to add ONE widget via setControl() but this widget can have multiple children.

There is a good example here.

Here is the sample code from this site (slightly modified):

public static void main(String[] args) {
    Display display = new Display();
    final Shell shell = new Shell(display);
    final TabFolder tabFolder = new TabFolder(shell, SWT.BORDER);
    for (int i = 0; i < 6; i++) {
      TabItem item = new TabItem(tabFolder, SWT.NONE);
      item.setText("TabItem " + i);
      item.setToolTipText("This is my tab" + i);

      Composite composite = new Composite(tabFolder, SWT.NONE);
      composite.setLayout(new FillLayout());
      new Button(composite, SWT.PUSH).setText("Button");
      new Text(composite, SWT.BORDER).setText("TextField");
      new Label(composite, SWT.NONE).setText("Label");

      Table table = new Table(composite, SWT.NONE);
      table.setHeaderVisible(true);

      new TableItem(table, SWT.NONE).setText("TableItem");

      item.setControl(composite);

    }
    tabFolder.pack();
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
}