Eclipse - JFace表列未显示在自定义对话框中

时间:2017-09-06 11:26:57

标签: java eclipse swt jface

我正在使用JFace进行自定义对话,但是我的列无法显示。这是我的代码。我得到的只是没有列的表格和左边的蓝线。这扩展了JFace对话框。

@Override
protected Control createDialogArea(Composite parent)
{
  Composite container = (Composite) super.createDialogArea(parent);

  container.setLayout(new GridLayout());

  addTableToDialog(container);

  container.getShell().setSize(600, 400);

  return container;
 }


private void addTableToDialog(Composite container)
{
   _tableViewer = new TableViewer(container, SWT.MULTI | SWT.H_SCROLL |  SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
   _tableViewer.getTable().setHeaderVisible(true);
   _tableViewer.getTable().setLinesVisible(true);
   _tableViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

  renderHeaders();
}

private void renderHeaders()     {

  int bound = 1;

  for (int header = 0; header < _headers.length; header++)
  {
     String tableHeader = _headers[header];
     createTableViewerColumn(tableHeader, bound);
  }

}


private TableViewerColumn createTableViewerColumn(String title, int bound)
{
   final TableViewerColumn viewerColumn = new  TableViewerColumn(_tableViewer, SWT.NONE);
   final TableColumn tableColumn = viewerColumn.getColumn();

  tableColumn.setText(title);
  tableColumn.setResizable(true);
  tableColumn.setMoveable(true);

  _tableColumnLayout.setColumnData(tableColumn, new ColumnWeightData(bound));

  return viewerColumn;

 }

1 个答案:

答案 0 :(得分:0)

以下为我解决了这个问题。我在创建TableViewer时定义了TableColumnLayout,并将其设置为包含该表的复合的布局。

private void addTableToDialog(Composite container)
{
  TableColumnLayout tableColumnLayout = new TableColumnLayout();

  Composite tableContainer = new Composite(container, SWT.NONE);
  tableContainer.setLayout(tableColumnLayout);
  tableContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

  _tableViewer = new TableViewer(tableContainer, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
  _tableViewer.getTable().setHeaderVisible(true);
  _tableViewer.getTable().setLinesVisible(true);

  renderHeaders(tableColumnLayout);
}