Разработка плагина Eclipse: таблица с вертикальной прокруткой? - PullRequest
0 голосов
/ 18 декабря 2010

Я пытаюсь создать вертикально прокручивающуюся таблицу в диалоге, но безуспешно.Когда я создаю таблицу, она автоматически расширяется до необходимой высоты независимо от размера / разрешения экрана.Множество данных создает таблицу, которая выходит далеко за нижнюю часть экрана.

Мой код выглядит примерно так (не дословно, может быть, типа или два):

final Table table = new Table(parent, SWT.SINGLE | 
  SWT.FULL_SELECTION | SWT.SCROLL_LINE | borderStyle | orientation );
table.setHeaderVisible(true);
table.setLinesVisible(true);

TableViewer tableView = new TableViewer(table);

// code yanked to set up the columns (movable == false, 
// resiable == true, with set text, widths, and toolTipText)

tableView.setContentProvider(new ArrayContentProvider());
// BeanLabelProvider's getColumnText returns the beanDescriptor's
// getReadMethod.invoke().toString()
tableView.setLabelProvider(new BeanLableProvider(MyClass.class));
tableView.setInput(anArrayOfMyClass);

Весь этот код находится в классе моего диалога createDialogArea ().

В любом случае, я пробовал следующее:

  1. treeView.setItemCount() обрезает данные, но неограничить количество отображаемых данных.
  2. table.getVerticalBar() возвращает действительное значение ScrollBar, а это scrollbar.getVisible() == true; ?!В самом деле?Докажите это.Я так не думал.setVisible(true) ничего не делает.
  3. table.setBounds()?Нету.Даже после того, как я позвоню layout() и / или redraw().
  4. Выше было сделано в течение createDialogArea().Если я вызываю setBounds() в MyDialog.initializeBounds (), он сжимает таблицу и добавляет полосы прокрутки (задыхаются!), Но размер диалогового окна не изменяется.Вызов table.getParent().layout(true) изменяет размер таблицы, а не диалогового окна.Ауг!
  5. В initBounds у меня есть следующий код:

    Shell shell = getShell();
    shell.setBounds(foo, bar, baz qux);
    myTable.setBounds(foo, bar, baz-fudgeX, qux-fudgeY);
    myTable.getVerticalBar().setVisible(true); // see, it wasn't null!
    // this line doesn't seem to have any effect, I can comment it out and have
    // the same apparent result.
    shell.layout(true);
    // If I call shell.pack() the table snaps back to its original size (huge).
    

Без вызова pack(), все в порядке / отменитькнопки отсекаются от нижней части диалога.С ним все упражнение становится спорным.

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

1 Ответ

5 голосов
/ 19 декабря 2010

Какой макет вы используете для Shell?Большинство макетов просто запрашивают элементы управления для их предпочтительного размера, во время вызова layout().Предпочтительный размер вашей таблицы - это размер, в котором могут отображаться все строки.Если ограничений больше нет, макет изменяет размер командной консоли до этого предпочтительного размера, а это не то, что вам нужно.

Чтобы этого не произошло, вам нужно установить подсказку высоты для вашего макета в таблице.Примером этого является фрагмент .Если вы удалите строку

data.heightHint = 200;

, полученная оболочка окажется слишком высокой.

...