设置新输入时,TableViewer 缩小为带有滚动条的单行

TableViewer shrinks to a single row with a scroll bar when new input is set

我正在 eclipse 中实现一个插件,它从数据库中读取一组值并将其显示在 ViewPart 内的 TableViewer 中。 TableViewer 使用 ArrayContentProvider 如图所示

viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
...
viewer.setContentProvider(new ArrayContentProvider());

我还有一个处理程序可以访问 TableViewer 实例,用于从 XML 文件导入数据。当导入器导入数据时,我创建了一个 ModelProvider 实例,它生成一个对象列表,其数据由 TableViewer.

显示

处理程序然后设置输入:

viewer.setInput(new ModelProvider(Data.getDocs()).getTableRows());

当我测试这个应用程序时,这个 ViewPart 已经打开(并且 TableViewer 是空的)并调用导入数据的处理程序,数据导入成功但是 TableViewer 仅显示一行和滚动条。只有当我将 ViewPart 拖到 Workbench 上的某个其他位置时,才会显示所有行。

我什至尝试过:

viewer.setInput(new ModelProvider(Data.getDocs()).getTableRows());
viewer.refresh();

viewer.setInput(null);
viewer.setInput(new ModelProvider(Data.getDocs()).getTableRows());
viewer.refresh();

但没有任何效果。如何在设置新输入后立即显示所有行?

我认为你没有 table 问题,而是布局问题。

如果您的观众 parent 有 GridLayout,则执行:

viewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

或者您可以在 parent 上设置一个 FillLayout,仅此而已。

(如果您认为我误解了您的问题,请post截图)