JFace TableViewer - 如何设置大小以仅显示一行?
JFace TableViewer - How to set the size to display one row only?
我有一个 TableViewer,我知道其中总是有一行数据。
当我有 table 的数据时,我可以调用 setInputData(...)
并传递带有 Arrays.asList(...)
的一个对象,以使 Table 大小正确显示一行数据。
当我没有对象时,我仍然希望 Table 调整大小以仅显示一行。但是,如果我使用这个:setInputData(new ArrayList<Object>(0))
,Table 会自动调整大小以显示大约 3 & 半空白行。我怎样才能让 Table 的大小始终只显示一行?
我应该提一下,我将 GridLayout 用于 TableViewer 所在的 Composite 以及 TableViewer。
我曾尝试将 TableViewer 中的 SWT Table 的边界设置为单个项目的大小,但这没有帮助。我没有在 SO 上或通过一般 Google 搜索找到任何类似的问题,但是在这个问题中:,提问者能够将他的 Table 大小设置为显示一行。不幸的是,我没有足够的代表。评论问他是怎么做到的。
编辑: 添加更多相关代码
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
您可以查询 table 来计算一行的大小
Point Site = table.computeSize( SWT.DEFAULT, table.getItemHeight() * 1 );
接下来您需要告诉布局为 table 保留那么多 space。例如在GridLayout
中使用gridData.heightHint
对于到达此 link 寻找解决方案的任何人,基于 Rüdiger Herrmann 的回答,最终对我有用的是在 Composite
中创建 TableViewer
这是然后放在ScrolledComposite
里面。 (这是通过另一个 Whosebug link 发现的,它指出 Control
需要放在 ScrolledComposite
内的 Composite
内才能正确显示。)然后 Composite
需要设置为 ScrolledComposite
,如:ScrolledComposite.setContent(Composite)
。
将 ScrolledComposite
和 Composite
布局都设置为 FillLayout
并将 ScrolledComposite
的大小设置为 tableViewer.getTable().computeSize(SWT.DEFAULT, tableViewer.getTable().getItemHeight())
后,我是能够获得 TableViewer
.
的正确高度
完成后,在调用 tableViewer.setInput(objectList);
后,我将大小设置为 TableViewer
,其中:tableViewer.getTable().setSize(tableViewer.getTable().computeSize(tableViewer.getTable().getClientArea().width, tableViewer.getTable().getItemHeight()));
我有一个 TableViewer,我知道其中总是有一行数据。
当我有 table 的数据时,我可以调用 setInputData(...)
并传递带有 Arrays.asList(...)
的一个对象,以使 Table 大小正确显示一行数据。
当我没有对象时,我仍然希望 Table 调整大小以仅显示一行。但是,如果我使用这个:setInputData(new ArrayList<Object>(0))
,Table 会自动调整大小以显示大约 3 & 半空白行。我怎样才能让 Table 的大小始终只显示一行?
我应该提一下,我将 GridLayout 用于 TableViewer 所在的 Composite 以及 TableViewer。
我曾尝试将 TableViewer 中的 SWT Table 的边界设置为单个项目的大小,但这没有帮助。我没有在 SO 上或通过一般 Google 搜索找到任何类似的问题,但是在这个问题中:
编辑: 添加更多相关代码
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
您可以查询 table 来计算一行的大小
Point Site = table.computeSize( SWT.DEFAULT, table.getItemHeight() * 1 );
接下来您需要告诉布局为 table 保留那么多 space。例如在GridLayout
中使用gridData.heightHint
对于到达此 link 寻找解决方案的任何人,基于 Rüdiger Herrmann 的回答,最终对我有用的是在 Composite
中创建 TableViewer
这是然后放在ScrolledComposite
里面。 (这是通过另一个 Whosebug link 发现的,它指出 Control
需要放在 ScrolledComposite
内的 Composite
内才能正确显示。)然后 Composite
需要设置为 ScrolledComposite
,如:ScrolledComposite.setContent(Composite)
。
将 ScrolledComposite
和 Composite
布局都设置为 FillLayout
并将 ScrolledComposite
的大小设置为 tableViewer.getTable().computeSize(SWT.DEFAULT, tableViewer.getTable().getItemHeight())
后,我是能够获得 TableViewer
.
完成后,在调用 tableViewer.setInput(objectList);
后,我将大小设置为 TableViewer
,其中:tableViewer.getTable().setSize(tableViewer.getTable().computeSize(tableViewer.getTable().getClientArea().width, tableViewer.getTable().getItemHeight()));