我在一个带有单个排序列的向导页面中设置了一个JFace CheckboxTableViewer。表中有足够的条目,因此需要垂直滚动条。
当我打开向导时,表中第一个元素的大部分已经滚动到了以外。 我只能看到第一个表元素的底部。 第二个表元素是第一个完全可见的元素。
private void createCheckboxTable(Composite container) {
Composite tableContainer = new Composite(container, SWT.NONE);
TableColumnLayout tableColumnLayout = new TableColumnLayout();
tableContainer.setLayout(tableColumnLayout);
GridDataFactory.fillDefaults().grab(true, true).applyTo(tableContainer);
CheckboxTableViewer viewer = CheckboxTableViewer.newCheckList(tableContainer, SWT.BORDER | SWT.FULL_SELECTION
| SWT.MULTI);
ObservableListContentProvider listContentProvider = new ObservableListContentProvider();
viewer.setContentProvider(listContentProvider);
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);// POS 1
TableViewerColumn tableViewerColumn = new TableViewerColumn(viewer, SWT.LEFT);
TableColumn column = tableViewerColumn.getColumn();
tableColumnLayout.setColumnData(column, new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, false));
column.setText("Column");
tableViewerColumn.setLabelProvider(new DependencyInfoFileNameColumnLabelProvider());
TableSortConfigurator.newConfigurator(viewer, new Action() {
@Override
public void run() {
viewer.refresh();
}
}).add(column, new DependencyInfoNameComparator()).initialize(column, SWT.UP).configure(); //POS 2
}
作为测试,在排序发生之前,我在上面的POS 1输入了以下行:
table.setSelection(0);
再次打开向导后,我看到所选元素是表格底部可见的最后一个元素。所以看起来这就是表中不寻常的初始垂直位置的原因。
当我从POS 1中删除code table.setSelection(0);
并将其添加到POS 2时会发生奇怪的事情。表格中的第一个元素是按照我的预期选择的,但我仍然观察到相同的初始垂直滚动。
换句话说,正确选择了表格的第一个元素,但只是部分可见。
有谁知道这里发生了什么?或者有一些我错过的方法将视图返回到表的顶部?
由于