如何在TabFolder中嵌入SWT TableViewer?

时间:2010-03-07 20:51:47

标签: java swt jface tableviewer tabbed-view

我正在尝试在SWT TableViewer中嵌入JFace TabFolder,但是当我这样做时,表格不显示。我的GitToDo代码中的当前(工作代码)看起来像(请参阅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);

后者GitToDoTree 使用此构造函数扩展TableViewer

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

因此,当我从Shell构建TableViewer扩展GitToDoTree时,它可以工作,但是一旦我尝试从TabFolder构建它或者(也尝试过)一个Composite,就不会再显示任何内容了。

如何让我的TableViewer显示在TabFolder中?

1 个答案:

答案 0 :(得分:5)

如果您将TableViewer类添加到Composite时未显示,我会说您可能没有为嵌套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);

至于TabFolder可能是你没有在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");