How to embed a SWT TableViewer in a TabFolder?

3.3k views Asked by At

I am trying to embed a JFace TableViewer in a SWT TabFolder, but when I do so, the table does not show up. The current (working code) in my GitToDo code looks like (see this Git repos):

    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Git ToDo");
    FillLayout layout = new FillLayout();
    shell.setLayout(layout);

    final GitToDoTree tableViewer = new GitToDoTree(shell);

Where the latter GitToDoTree extends TableViewer, with this constructor:

    super(parent, SWT.SINGLE | SWT.FULL_SELECTION | SWT.FILL);
    this.shell = parent;
    table = this.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

So, when I construct the TableViewer-extending GitToDoTree from a Shell it works, but as soon as I try to build it from a TabFolder or (tried that too) a Composite, nothing shows up anymore.

How can I get my TableViewer to show up in the TabFolder?

1

There are 1 answers

1
Yanamon On BEST ANSWER

If your TableViewer class isn't showing up when you add it to a Composite I would say that chances are that you are not setting a layout for the nested Composite.

final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Git ToDo");
FillLayout layout = new FillLayout();
shell.setLayout(layout);

Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new FillLayout()); // Possible missing layout?

final GitToDoTree tableViewer = new GitToDoTree(composite);

And as for the TabFolder that may be that you are not setting the client control on the TabItem

TabFolder tabFolder = new TabFolder(shell, SWT.NONE);
TabItem item = new TabItem(tabFolder, SWT.NONE);
item.setText("Table");

GitToDoTree viewer = new GitToDoTree(tabFolder);
item.setControl(viewer.getTable()); // Possible setControl call?

TabItem item2= new TabItem(tabFolder, SWT.NONE);
item2.setText("Empty");