如何禁用swt表中的水平滚动条?

时间:2012-04-02 13:26:23

标签: java swt

要禁用垂直滚动条,我使用以下语法

table.getHorizontalBar().setEnabled(false);

但它不起作用。这毁了我的申请ui。我该如何禁用它?

6 个答案:

答案 0 :(得分:13)

在构建表格时使用选项SWT.NO_SCROLLSWT.V_SCROLL,如下所示:

new Table (shell, SWT.NO_SCROLL | SWT.V_SCROLL);

答案 1 :(得分:6)

如果需要,您无法阻止Table显示其滚动条。但是,如果您为表提供所需的空间,则不必显示任何滚动条。

注意:的 您可以在构造函数中使用SWT.NO_SCROLL,但如果您想稍后更新它,则无法实现。

答案 2 :(得分:1)

Java SWT turorial中的ScrollBar / Table位置同步

可能,如果您要禁用滚动条,则表示您希望将内容与其他内容同步。下面是如何使用两个表的示例,其中名为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));
            }
        }
    });
  1. 在代码之上,添加以下内容: private static Table tableExcel; ArrayList<String[]> virtTableExcel = new ArrayList<String[]>(); final int PAGE_SIZE = 64; private Table tableRow;

  2. 如第7点所述,您从数组列表virtTableExcel中获取数据,但要触发第6点,请使用此(在代码中的某处,在您使用数据生成virtTableExcel之后),其中rowMax是等于的整数到virtTableExcel.size(); :tableExcel.setItemCount(rowMax); tableRow.setItemCount(rowMax);

  3. 请不要责怪我的代码,我在我的应用程序中使用它。但是,所有这些位可能对其他初学者有用。

答案 3 :(得分:1)

对我有用的工作:

声明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

获得了这个解决方案

答案 4 :(得分:0)

尝试

table.getHorizontalBar().setVisible(false);

答案 5 :(得分:0)

不简单:

leftTable.getVerticalBar()。addListener(SWT.Selection,event - &gt; {                rightTableViewer.getTable()setTopIndex(leftTableViewer.getTable()getTopIndex());

});

反之亦然。