JFace TableViewer语言 - 如何设置大小以仅显示一行



我有一个TableViewer,我知道它总是有一行数据。当我有该表的数据时,我可以调用 setInputData(...) 并使用 Arrays.asList(...) 传递一个对象,以使表的大小正确显示一行数据。

当我没有对象时,我仍然希望表格的大小仅显示一行。但是,如果我使用它:setInputData(new ArrayList<Object>(0)),表格会自动调整大小以显示大约 3 行半空白行。如何使表格始终调整大小以仅显示一行?

应该提到,我正在使用GridLayout来组合TableViewer以及TableViewer。

我尝试将 TableViewer 中 SWT 表的边界设置为单个项目的大小,但这并没有帮助。我没有在SO上或通过一般的Google搜索找到任何类似的问题,但是在这个问题中:当设置新输入时,TableViewer会缩小到带有滚动条的单行,提问者能够将他的表格大小调整为显示一行。不幸的是,我没有足够的代表来评论他是如何做到的。

编辑:添加一些更相关的代码

final ScrolledComposite scrolledComposite = new ScrolledComposite(parentComposite, SWT.V_SCROLL);
scrolledComposite.setLayout(new GridLayout());
scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
scrolledComposite.setAlwaysShowScrollBars(true);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
TableViewer tableViewer = new TableViewer(scrolledComposite, SWT.FULL_SELECTION | SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
// I'm setting the LabelProvider, ContentProvider here.
GridData gridData = new GridData();
gridData.heightHint = tableViewer.getTable().getItemHeight();
tableViewer.getTable().setLayoutData(gridData);
scrolledComposite.setContent(tableViewer.getControl());
scrolledComposite.setMinSize(tableViewer.getTable().getGridLineWidth(), tableViewer.getTable().getItemHeight());

然后,在一个单独的方法中:

tableViewer.setInputData(objectList); // This may be empty or have exactly one object

您可以像这样查询表以计算其一行的大小

Point Site = table.computeSize( SWT.DEFAULT, table.getItemHeight() * 1 );

接下来,您需要告诉布局为桌子保留那么多空间。例如,在GridLayout中使用gridData.heightHint

对于任何到达此链接寻找解决方案的人,在 Rüdiger Herrmann 的答案的基础上,最终对我有用的是在Composite内创建TableViewer,然后将其放置在ScrolledComposite内。(这是通过另一个StackOverflow链接找到的,该链接指出需要将Control放置在ScrolledComposite内的Composite内才能正确显示。然后需要将Composite设置为ScrolledComposite,例如:ScrolledComposite.setContent(Composite)

在设置了两者之后,ScrolledCompositeComposite布局FillLayout并设置了要tableViewer.getTable().computeSize(SWT.DEFAULT, tableViewer.getTable().getItemHeight())ScrolledComposite的大小,我能够获得TableViewer的正确高度。

完成后,在调用tableViewer.setInput(objectList);后,我将大小设置为TableViewertableViewer.getTable().setSize(tableViewer.getTable().computeSize(tableViewer.getTable().getClientArea().width, tableViewer.getTable().getItemHeight()));

最新更新