Как отключить горизонтальные полосы прокрутки в таблице SWT? - PullRequest
4 голосов
/ 02 апреля 2012

Чтобы отключить вертикальную полосу прокрутки, я использовал следующий синтаксис

table.getHorizontalBar().setEnabled(false);

Но он не работает.Это разрушает мой интерфейс приложения.Как я могу отключить его?

Ответы [ 6 ]

13 голосов
/ 07 декабря 2013

Используйте опции SWT.NO_SCROLL и SWT.V_SCROLL при построении таблицы следующим образом:

new Table (shell, SWT.NO_SCROLL | SWT.V_SCROLL);
6 голосов
/ 02 апреля 2012

Вы не можете запретить Table показывать полосы прокрутки, если он этого хочет.Однако, если вы предоставите таблице необходимое пространство, ей не нужно будет отображать полосы прокрутки.

Примечание: Вы можете просто использовать SWT.NO_SCROLL в конструкторе, но если вы хотитеобновить его позже будет невозможно.

1 голос
/ 19 ноября 2012

Что для меня работает:

При объявлении 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

1 голос
/ 02 июля 2012

ScrollBar / Синхронизация положения таблицы в Java SWT turorial

Возможно, если вы хотите отключить полосу прокрутки, это означает, что вы хотите синхронизировать контент с чем-то другим. Вот пример того, как это сделать с двумя таблицами, где содержимое основной таблицы с именем 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-форму для лучшей навигации, вставьте это выше пункт 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<br> {<br> 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);

Пожалуйста, не вините меня за код, я использовал его из своего приложения. Но все эти биты могут быть полезны для других начинающих.

0 голосов
/ 06 мая 2016

Не просто:

leftTable.getVerticalBar (). AddListener (SWT.Selection, event -> { rightTableViewer.getTable () setTopIndex (leftTableViewer.getTable () getTopIndex ().);.

});

и наоборот.

0 голосов
/ 02 апреля 2012

Попробуйте

table.getHorizontalBar().setVisible(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...