要禁用垂直滚动条,我使用以下语法
table.getHorizontalBar().setEnabled(false);
但它没有用。这毁了我的申请ui。我怎么能禁用它?
你不能阻止Table
显示它的滚动条,如果它想。但是,如果您为表提供所需的空间,则不必显示任何滚动条。
注意:您只需在构造函数中使用SWT.NO_SCROLL,但如果您想稍后更新它,则无法进行更新。
在构造表时使用选项SWT.NO_SCROLL
和SWT.V_SCROLL
如下:
new Table (shell, SWT.NO_SCROLL | SWT.V_SCROLL);
也许,如果要禁用滚动条,则表示您希望将内容与其他内容同步。下面是如何使用两个表的示例,其中名为tableExcel的主表的内容在名为tableRow的额外表中进行镜像(请注意,代码可能不完美,因为我是初学者):
*注意:代码不完整并仅显示关键内容(初学者,请使用Window Builder然后编辑/添加代码):
1)正如ankur.trapasiya所提到的,这样做:
tableRow = new Table(sashFormExcel, SWT.BORDER | SWT.VIRTUAL | SWT.NO_SCROLL);
2)并且(SWT.VIRTUAL将需要执行变通方法,并且要快速加载表,它将加载您看到的内容和滚动的位置)
tableExcel = new Table(sashFormExcel, SWT.BORDER | SWT.VIRTUAL);
3)因为我使用了sash-form更好的导航,所以在第1点上面插入:
SashForm sashFormExcel = new SashForm(sashForm_Main, SWT.NONE);
4)然后执行此操作(在第3点之后):
synchronizer synchronize = new synchronizer(tableRow, tableExcel); tableExcel.getVerticalBar().addSelectionListener(synchronize);
5)添加此类(将同步表的内容位置):
class synchronizer implements SelectionListener
{
Table t1, t2;
public synchronizer(Table tableRow, Table tableMain)
{
t1 = tableRow;
t2 = tableMain;
}
@Override
public void widgetSelected(SelectionEvent e) {
t1.setTopIndex(t2.getTopIndex());
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
}
6)在第2点之后,添加它(它将使得快速加载主表,并且还将同步禁用滚动条的表):
tableExcel.addListener( SWT.SetData, new Listener() {
public void handleEvent( Event event ) {
TableItem item = (TableItem) event.item;
int index = event.index;
int page = index / PAGE_SIZE;
int start = page * PAGE_SIZE;
int end = start + PAGE_SIZE;
end = Math.min (end, virtTableExcel.size());
for (int i = start; i < end; i++) {
item = tableExcel.getItem (i);
item.setText (virtTableExcel.get(i));
tableRow.getItem(i).setText(Integer.toString(i));
}
}
});
private static Table tableExcel;
ArrayList<String[]> virtTableExcel = new ArrayList<String[]>();
final int PAGE_SIZE = 64;
private Table tableRow;
tableExcel.setItemCount(rowMax);
tableRow.setItemCount(rowMax);
请不要责怪我的代码,我在我的应用程序中使用它。但是,所有这些位可能对其他初学者有用。
对我有用:
在声明TableViewer时,我这样做:
this.viewer.getTable().getHorizontalBar().setVisible(false);
this.viewer.getTable().pack();
this.viewer.getTable().getParent().layout();
this.viewer.getTable().getParent().getParent().layout();
当我改变观众输入时,我也会调用最后三行。我得到了这个解决方案:https://bugs.eclipse.org/bugs/show_bug.cgi?id=304128
尝试
table.getHorizontalBar().setVisible(false);
不简单:
leftTable.getVerticalBar()。addListener(SWT.Selection,event - > {rightTableViewer.getTable()。setTopIndex(leftTableViewer.getTable()。getTopIndex());
});
反之亦然。