0
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

Baz
  • 36,440
  • 11
  • 68
  • 94
Asad Ullah
  • 117
  • 1
  • 3
  • 11
  • I tried your code and it works for me. Try this mini example: http://pastebin.com/DyvxtV07 – Baz Aug 03 '12 at 08:12

1 Answers1

0

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();
    }
}
Baz
  • 36,440
  • 11
  • 68
  • 94
  • your suggestion worked well but for labels and buttons only it gives error when table is added in that composite – Asad Ullah Aug 03 '12 at 07:32
  • @AsadUllah It works for me for any `Control`. Just tried it with `Text` which is what you want. – Baz Aug 03 '12 at 07:34
  • sir i want a table, labels and texts in that tabitem – Asad Ullah Aug 03 '12 at 07:36
  • @AsadUllah And what is the error you are having? It works fine for me. – Baz Aug 03 '12 at 07:37
  • the browser stops working no error on console can i add a picture in comments?? a screenshot of my eclipse might give you some idea i am new to stackoverflow and i dont know whether i can add picture here or not – Asad Ullah Aug 03 '12 at 07:39
  • @AsadUllah Please add the picture to your question. However, did you try the sample code I provided? It contains a `Button`, a `Label`, a `Text` and a `Table`, which is all you mentioned. – Baz Aug 03 '12 at 07:41
  • @AsadUllah First of all: Did you try the code I provided? You can add pictures by editing your question. There is a small image icon above the text field with the tooltip "Image ". Use that to upload a picture. – Baz Aug 03 '12 at 07:50
  • i think my reputation is not enough to add image and yes i am doing exactly the same thing just a little difference that i am adding one table instead of 5 tables – Asad Ullah Aug 03 '12 at 07:53