【发布时间】:2013-10-23 09:59:39
【问题描述】:
即使表是空的,是否可以始终在 SWT 表中显示垂直滚动条?通过始终显示(可能禁用)垂直滚动条,可以避免当列使用 ColumnWeightData 进行布局时,最后一列被部分隐藏。
我尝试使用 SWT.V_SCROLL 或使用 table.getVerticalBar().setVisible(true) 初始化表 - 均未成功。
ScrollableComposite 中有一个方法setAlwaysShowScrollBars。我正在寻找的是Table 中的类似方法。
更新:我想当表格包含足够数据时可见的滚动条不是Table从Scrollable继承的那些滚动条。我已经调试了ScrollBar.setVisible(boolean),它似乎没有在表格布局更新时被调用。这个观察正确吗?
更新 2: 这是用于表构造的 sn-p。即使表格是空的,垂直滚动条也可见,即使表格数据向下滚动,列标题也可见。注意:sn-p 省略了一些细节作为标签提供者和一些其他控件排列在同一个父组合中。
protected void createMasterPart(final IManagedForm managedForm, Composite parentComposite)
{
FormToolkit toolkit = managedForm.getToolkit();
Composite contentComposite = toolkit.createComposite(parentComposite, SWT.NONE);
contentComposite.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
toolkit.paintBordersFor(contentComposite);
contentComposite.setLayout(new GridLayout(2, false));
GridData gd;
Composite tableComposite = new Composite(contentComposite, SWT.NONE);
TableColumnLayout tableColumnLayout = new TableColumnLayout();
tableComposite.setLayout(tableColumnLayout);
gd = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 3);
tableComposite.setLayoutData(gd);
speakerTableViewer = new TableViewer(tableComposite, SWT.BORDER | SWT.FULL_SELECTION);
speakerTableViewer.setContentProvider(ArrayContentProvider.getInstance());
Table speakerTable = speakerTableViewer.getTable();
speakerTable.setHeaderVisible(true);
speakerTable.setLinesVisible(true);
toolkit.paintBordersFor(speakerTable);
TableViewerColumn tableViewerAudiosampleColumn = new TableViewerColumn(speakerTableViewer, SWT.NONE);
TableColumn audiosampleColumn = tableViewerAudiosampleColumn.getColumn();
tableColumnLayout.setColumnData(audiosampleColumn, new ColumnWeightData(60, true));
audiosampleColumn.setText("Sample");
TableViewerColumn tableViewerSpeakerColumn = new TableViewerColumn(speakerTableViewer, SWT.NONE);
TableColumn speakerColumn = tableViewerSpeakerColumn.getColumn();
tableColumnLayout.setColumnData(speakerColumn, new ColumnWeightData(60, true));
speakerColumn.setText("Speaker");
TableViewerColumn tableViewerRemarkColumn = new TableViewerColumn(speakerTableViewer, SWT.NONE);
TableColumn remarkColumn = tableViewerRemarkColumn.getColumn();
tableColumnLayout.setColumnData(remarkColumn, new ColumnWeightData(120, true));
remarkColumn.setText("Remark");
}
【问题讨论】:
-
将表格包裹在面板内。
-
@Makky
panel是什么意思? -
为什么要为空数据表显示滚动条?
-
您可以使用
org.eclipse.jface.layout.TableColumnLayout,它会在出现滚动条时调整列大小。 -
@Makky 如果起初表格没有滚动条,后来出现滚动条,我想避免最后一列被部分隐藏。此外,我想避免在这种情况下调整列的大小。