GWT: создание прокручиваемого FlexTable в полноэкранном TabPanel - PullRequest
1 голос
/ 10 августа 2009

Я хотел бы создать TabPanel, который занимает всю клиентскую область браузера, и внутри него поместить FlexTable, который прокручивает при необходимости. Однако у меня возникают проблемы с достижением этого. Я пробовал:

public void onModuleLoad() {
    TabPanel test = new TabPanel();
    test.setSize("100%", "100%");

    FlexTable flex = new FlexTable();
    for (int i = 0; i < 100; i++)
        flex.setText(i, 0, "test " + i);

    test.add(flex, "tab");
    flex.setStyleName("overflow-auto");

    test.selectTab(0);
    RootPanel.get().add(test);
    }

Где overflow-auto определяется как:

.overflow-auto {
    overflow: auto;
}

Хотя панель вкладок должным образом занимает 100% ширины, она в конечном итоге масштабирует свою высоту до внутреннего FlexTable, вместо того, чтобы на нее накладывать полосы прокрутки. Как сделать так, чтобы клиентская область вкладки не зависела от размера ее дочернего элемента?

Ответы [ 5 ]

3 голосов
/ 13 августа 2009

Возможно, вам понадобится использовать ScrollPanel внутри этой вкладки, чтобы получить желаемый эффект. ScrollPanel - это контейнер, который просто берет один виджет и помещает на него полосу прокрутки, если это необходимо. Я должен отметить, что ScrollPanel, насколько мне известно, зависит от установки для него явного размера, иначе он будет радостно расширяться за счет содержимого, которое вы в него вставляете.

Предостережение, однако: имел место давний дефект с какими-либо прокручиваемыми панелями внутри TabPanel. Последнее, что я видел, было все еще открыто.

http://code.google.com/p/google-web-toolkit/issues/detail?id=1343

Я думаю, что решение, которое вы искали бы здесь, состоит в том, чтобы поместить FlexTable в какую-то другую панель контейнера, например, в VerticalPanel (возможно, достаточно SimplePanel), затем поместить это в ScrollPanel и, наконец, вставить это в TabPanel.

Как я уже заметил, ScrollPanel понадобится вам для управления высотой вручную. Итак, если вы хотите, чтобы оно оставалось высотой окна, это будет связано с написанием некоторого кода, который проверяет размер браузера и выясняет, какой высоты должна быть ScrollPanel. Вам также нужно будет прикрепить обработчик изменения размера к окну, чтобы перехватывать изменения размера и что-то исправлять.

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

1 голос
/ 25 февраля 2010

То, что сработало для меня, было похоже на то, что написал bikesandcode:

  1. Создание FlexPanel
  2. Создайте ScrollPanel и добавьте в нее FlexPanel
  3. Установите необходимый размер ScrollPanel (с использованием абсолютных единиц CSS)
  4. создать SimplePanel и добавить к ней ScrollPanel
  5. Добавление SimplePanel к TabPanel
1 голос
/ 13 декабря 2009

Похоже, в GWT 2.0 появилась новая система макетов, которая должна делать то, что я хотел: http://code.google.com/webtoolkit/doc/latest/DevGuideUiPanels.html#LayoutPanels

0 голосов
/ 03 августа 2016

Я использую HorizontalPanel (предоставляемый gxt) в качестве родителя для FlexTable и использую метод setAutoHeight (true). Это работает нормально.

0 голосов
/ 10 августа 2009

Проблема на самом деле в том, что таблица установлена ​​на 100% ширины / высоты, когда вы устанавливаете ее как дочернюю вкладку. Если вы сделаете это, переполнение auto больше не будет иметь смысла, так как вы позволите гибкой таблице быть 100% (ее содержимого).

Переполнение работает, только если вы устанавливаете ширину / высоту, используя пиксели.

...